LeetCode --Reverse Integer
阿新 • • 發佈:2019-02-11
題目
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
分析
這個要注意幾點:
1.對負數如何處理?
2.如果是100等反轉過來為多少呢?
3.反轉的數溢位瞭如何處理?怎麼判斷溢位?
解答
1.負數先處理為正數,然後輸出時再處理成負數即可
2.100反轉過來當成1
3.溢位是最困難的,例如,一個很大的數,他溢位就會發生截斷效應,讓程式無法判斷這是否溢位。例如,8Bit,最大是255,那麼一個數是 245,反轉為542,發生溢位,結果變成了542%255,那麼怎麼判斷?這個問題,之前困擾了我很久,解決辦法是,用一個比8bit大的型別數去存下這個542,再拿去和255比較。那麼在這個題目中,是32bit的int型別,那麼我們用8位元組的long型別去儲存,再去判斷溢位,在返回的時候,再將long截斷為int型別即可。
程式碼(java版本)
public class Solution
{
public int reverse(int x)
{
//處理負數,j將其變為正數,再用flag標記一下
int flag = 0;
if(x < 0)
{
x = -x;
flag = -1;
}
//演算法核心部分,用一個long型別的ret去解決判斷溢位問題
long ret = 0;
while(x != 0)
{
ret = ret * 10 + x % 10;
x /= 10;
}
//判斷是否溢位
if(ret > Integer.MAX_VALUE || ret < Integer.MIN_VALUE)
{
ret = 0;
}
//處理負數
if(flag == -1)
{
ret = -ret;
}
return (int)ret;
}
}