7.整數反轉Java版,每日一題系列(此題來自力扣網)

給出一個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) 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。