整數反轉
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [−231, 231 − 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
我的解法:
class Solution: def reverse(self, x: int) -> int: s = str(x)[::-1].rstrip('-') if int(s) < 2**31: if x >=0: return int(s) else: return 0-int(s) return 0
先將輸入的數轉換成字符串s,反向遍歷s來反轉輸入的整數,如果輸入值為負數,則去掉輸入值的符號。s轉換成整數,如果不溢出,判斷符號輸出結果。
官方解法:
class Solution { public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0; rev = rev * 10 + pop; } return rev; } };
使用數學方法模仿棧操作推入和彈出數字,不將數字轉換成字符串。
//pop operation: pop = x % 10; x /= 10; //push operation: temp = rev * 10 + pop; rev = temp;
官方加入了兩句判斷語句來防止 temp = rev * 10 + pop 溢出。由於已知int類型的開頭數字,不會溢出可以不用判斷pop值,但如果是其他類型還是需要判斷pop值防止溢出。