LeetCode7. 整数反转
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
思路分析
- 使用整数除法和取模的思路
- 整数每次模10,则得到这个整数的最低位,每次除以10,则去掉这个整数的最低位
- 因此可以循环的判断,循环结束的条件为 不为0,
- 每次循环将 上一次运算的结果 * 10 再加上拿到的最低位
- 题目要求反转后整数不超过32位有符号整数的范围,因此要加以判断
源码及分析
public int reverse(int x) {
//记录返回值
int res = 0;
while (x != 0){
//判断是否越界
//@Native public static final int MIN_VALUE = 0x80000000;
// 十进制数 -2147483648
//@Native public static final int MAX_VALUE = 0x7fffffff;
//十进制数 2147483647
//因此可以使用两个字段表示32位有符号整数的范围
if (res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10){
return 0;
}
//取模拿到最低位
int digit = x % 10;
//将每次拿到的最低位反转拼接
res = res * 10 + digit;
//除法去掉最低位
x = x / 10;
}
//返回
return res;
}