我的第一道算法题:整数反转
题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
思路: 不考虑转成字符串反转等方面,可以想到取模运算,再进行进位还原即可。如123先对10进行取模,得到3,再对12(除运算得到123/10)取模得到2,3进位加上2可得32(3*10+2),这样继续操作。
代码:
class Solution {
public int reverse(int x) {
// [-2147483648 , 2147483647]
int revNum = 0; //定义反转数的初值
while(x != 0){
int last = x % 10; //求末位数字
//注意!!!一定先判断
if(revNum > 214748364 || (revNum == 214748364 && last > 7)){ //判断正数
return 0;
}
if(revNum < -214748364 || (revNum == -214748364 && last < -8)){ //判断负数
return 0;
}
revNum = revNum *10 + last;//进位
x = x / 10;
}
return revNum;
}
}