7.整數反轉Java版,每日一題系列(此題來自力扣網) 給出一個31位的有符號整數,你需要將這個整數中每位上數字進行反轉。 示例1: 輸入: 123輸出: 321 示例2: 輸入: -123輸出: -321 示例3: 輸入: 120輸出: 21 方法:彈出和推入數字&溢出前進行檢查 思路 我們可以一 ...
給出一個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) 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。