给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围,就返回 0。
示例:
输入: x = 123
输出: 321
分析
这是一道easy的基础算法题,可以通过数学的取模实现;
例:-12345
也就是每次对10取模,先取出每个位置上的数(正负号保留):
-12345%10 = -5(这是个位上的数),之后将-12345 / 10=-1234
-1234%10 = -4(这是十位上的数),之后将-1234 / 10=-123
-123%10 = -3(这是百位上的数),之后将-123 / 10=-12
-12%10 = -2(这是千位上的数),之后将-12 / 10=-1
-1%10 = -1(这是个万位上的数)
接下来就是考虑翻转了:
-5*10000+(-4*1000)+(-3*100)+(-2*10)+(-1)=-54321
当然这里int类型是有限制的,要保证在不溢出的情况下翻转.这里超出就返回0
public static int reverse(int x){
//最大
int maxInt = 214748364;
//最小
int minInt = -214748364;
//最大位数
int maxIndex = 7;
//最小位数
int minIndex = -8;
int res = 0;
while(x!=0) {
//每次取末尾数字
int tmp = x%10;
//判断是否 大于 最大32位整数
if (res>maxInt || (res==maxInt && tmp>maxIndex)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<minInt || (res==minInt && tmp<minIndex)) {
return 0;
}
res = res*10 + tmp;
x /= 10;
}
return res;
}