https://leetcode.com/problems/reverse-integer/?tab=Description
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
這題如果是我想的話,肯定會想把它轉(zhuǎn)換成數(shù)組然后首位往中間逼近著換位。。program creek把這種想法叫作Naive Method...因為這樣需要分配額外空間。
事實上是有res = res * 10 + mod;
這么個技巧存在昧互,可以直接計算。注意判斷邊界。
public int reverse(int x) {
boolean flag = x > 0;
if (!flag) {
x = 0 - x;
}
int res = 0, mod = 0;
while (x > 0) {
mod = x % 10;
//判斷res邊界 不是x邊界
if (res > (Integer.MAX_VALUE - mod )/ 10) {
return 0;
}
res = res * 10 + mod;
x = x / 10;
}
if (!flag) {
return 0 - res;
} else return res;
}
另外承粤,program creek里有一個答案虑乖,不需要判斷正負號也是可以的懦趋。注意,-123 % 10結(jié)果是-3而不是3。上面的代碼為了后面方便處理疹味,先將數(shù)字轉(zhuǎn)為正數(shù)仅叫。
已犯錯誤:
- 把res > (Integer.MAX_VALUE - mod )/ 10 的判斷寫成了對于x的判斷。