题目:
Reverse digits of an integer. The reversed integer might overflow.
Example1: x = 123, return 321
Example2: x = -123, return -321
思路:
- 一开始想,不断除10取余,余数放在数组里,然后再乘10累加,注意用long,并且检查翻转后的数是否超出int范围。
- 后面发现根本不用数组。
/*//用了个数组,保存每位的数字,个位在前,大的在后,然后从前面开始乘10加起来
public int reverse(int x) {
boolean flag = true;
if(x < 0){
x = 0-x;
flag = false;
}
int[] t = new int[1000];
int i = 0;
long y = 0;
while(x/10 != 0){
t[i++] = x%10;
x = x/10;
}
t[i] = x;
for(int j = 0; j <= i; j++){
y *= 10;
y += t[j];
}
if(y > 2147483647 || (-y > 2147483648L))
return 0;
if(flag)
return (int)y;
return -(int)y;
}*/
//根本用不着数组,另外判断了翻转之后是否大于32bit int的范围,超出范围就返回0
public int reverse(int x) {
boolean flag = true;
if(x < 0){
x = 0-x;
flag = false;
}
long y = 0;
while(x > 0){
y = y*10+x%10;
x = x/10;
}
if(y > 2147483647 || (-y > 2147483648L))
return 0;
if(flag)
return (int)y;
return -(int)y;
}