<style>.cnblogs_code { width: auto; border-radius: 4px; box-shadow: 3px 2px 7px rgba(189, 183, 183, 1) } .ws-title { background-color: rgba(40, 120, 156, 1); font-size: 25px; font-family: "微軟雅黑"; padding: 8px 24px; border-radius: 4px; text-align: left; box-shadow: 1px 4px 5px 1px rgba(136, 136, 136, 1); color: rgba(255, 255, 255, 1) } .ws-content { margin-left: 20px; margin-top: 12px; clear: both } #demo tbody tr td { border: none }</style>
題目
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉,
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
解題
解法一、轉換字串 && 反轉字串 這里只需要判斷邊界(是否溢位,負數符號)
public int Reverse(int x) { var flag = x < 0 ? -1 : 1; var str = x.ToString(); var ans = default(long); if (flag > 0) { ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray())); if (ans > int.MaxValue) return 0; } else { str = str.Substring(1); ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray())); if ((ans - int.MaxValue) > 1) return 0; } return (int)ans * flag; }View Code
解法二、數學計算
字串的操作是比較耗時,而且需要額外的空間
個位 = x % 10;
x減少一位 = x / 10
反轉數字 = ans * 10 + 個位
不斷回圈直至x == 0,只需要判斷溢位條件就可以
public int Reverse(int x) { int ans = 0; while (x != 0) { int pop = x % 10; x /= 10; if (ans > int.MaxValue / 10 || ((ans == int.MaxValue / 10) && pop > 7)) return 0; if (ans < int.MinValue / 10 || ((ans == int.MinValue / 10) && pop < -8)) return 0; ans = ans * 10 + pop; } return ans; }View Code
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/135930.html
標籤:其他
