1.我的思路
创建一个int数组,存放反转后的各位数字。
各位数字通过取余数+除以10求得。
另外还要判断是否溢出,通过比较反转后的各位数字和Integer.MAX_VALUE的各位数字的大小来判断。
class Solution {
public int reverse(int x) {
int[] nums = new int[11];
int[] maxnums = new int[11];
int[] minnums = new int[11];
int maxx = Integer.MAX_VALUE;
int ans = 0, i;
for(int k=0;k<11;k++){
nums[k] = 0;
maxnums[k] = 0;
minnums[k] = 0;
}
if(x >= 0){
nums[0] = 0;
}
else{
nums[0] = 1;
x = -1*x;
}
for(i = 1; i <= 10; i++){
maxnums[i] = Math.abs(maxx%10);
maxx = Math.abs(maxx / 10);
if(maxx == 0){
break;
}
}
for(i = 1; i <= 10; i++){
minnums[i] = maxnums[i];
}
minnums[1]++;
for(i = 1; i <= 10; i++){
nums[i] = Math.abs(x%10);
x = Math.abs(x / 10);
if(x == 0){
break;
}
}
if(i==10){
if(nums[0] == 0){
for(int k = 10; k>0; k--){
if(nums[11 - k]>maxnums[k]){
return 0;
}
else if(nums[11 - k]<maxnums[k]){
break;
}
}
}
else{
for(int k = 10;k>0; k--){
if(nums[11 - k]>minnums[k]){
return 0;
}
else if(nums[11 - k]<minnums[k]){
break;
}
}
}
}
for(int j = 1; j <= i; j++){
ans = ans + (int)Math.pow(10,i-j) * nums[j];
}
if(nums[0] == 0){
return ans;
}
else{
return -1*ans;
}
}
}
2.官方思路
rev = rev * 10 + digit;
直接数学推算了一下溢出的条件。。。。