給出一個31位的有符號整數,你需要將這個整數中每位上數字進行反轉。
示例1:
輸入: 123
輸出: 321
示例2:
輸入: -123
輸出: -321
示例3:
輸入: 120
輸出: 21
方法:彈出和推入數字&溢出前進行檢查
思路
我們可以一次構建翻轉整數的一位數字。在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否導致溢出。
算法:
反轉整數的方法可以與反轉字符串進行類比。
我們想重復"彈出"X的最后一位數字,并將它"推入"到rev的后面。最后,rev將于X相反。
要在沒有輔助堆棧/數組的幫助下"彈出"和"推入"數字,我們可以使用數學方法。
//pop operation:
pop = x % 10;
x /= 10;
?
//push operation:
temp = rev * 10 + pop;
rev = temp;
但是,這種方法有溢出的風險。
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
作者:LeetCode 鏈接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
浙公網安備 33010602011771號