題目:
Given a 32-bit signed integer, reverse digits of an integer.
給定一個32位有符號整數,整數的反轉數字。
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
假設我們正在處理一個只能在32位有符號整數範圍內保持整數的環境。 出於此問題的目的,假設您的函數在反轉整數溢出時返回0。
思路:
首先,我們把符號單獨拿出來,統一將數轉換成正數再做處理,處理後再加上符號位即可。接下來就是數的倒置,以前本科就接觸過這類問題的解決方法。最簡單的一種方法就是通過把該數除10取餘來得到數的最後一位,也就是倒置數的第一位。除10後把商賦值給這個數(下面代碼中該數是x)。然後依次取餘,將商賦值給x。倒置後的數就是依次將得到的餘數乘以10再加上下一次得到的餘數(代碼中倒置的數爲reversed)。直到x爲0,此時,reversed中的數即爲最後結果。這裏的reversed定義爲long類型,是爲了防止倒置後的數會越界的問題。最後再判斷reversed是否超出32位int型的範圍,若超出則返回0。
代碼:
public class Solution {
public int reverse(int x){
int sign=1;
if(x<0){
sign = -1;
x = -x;
}
long reversed = 0;
for(;x>0;x/=10){
reversed = reversed*10+x%10;
}
reversed*=sign;
if(reversed>Integer.MAX_VALUE||reversed<Integer.MIN_VALUE){
return 0;
}else{
return (int) reversed;
}
}
}