整数反转(力扣)
题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2的31次, 2的31次 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0
题目分析:
在不考虑是否溢出的情况下分析:
1、定义一个最终结果 res = 0;
2、循环,把所给整数的个位取出来(x % 10),使结果res = res*10 + (x %10)
3、令 x = x / 10
4、循环条件为 x != 0
现在考虑溢出问题:
首先了解基本数据类型的取值范围:
所以是否溢出即是否超出了int类型的取值范围;
Java中int类型的取值范围为:Integer.MAX_VALUE ~ Integer.MIN_VALUE
如果超出了范围,那么在第二步之前的判断条件就是:
res > Integer.MAX_VALUE / 10 || res < Integer.MIN_VALUE / 10
完整代码为
public class Main {
public static void main(String[] args) {
System.out.println(reverse(-2147483648));
}
public static int reverse(int x) {
int res = 0;
while(x!=0) {
if(res>Integer.MAX_VALUE/10||res<Integer.MIN_VALUE/10) {
return 0;
}
res = (res*10+x%10);
x = x/10;
}
return res;
}
}
时间复杂度为:
空间复杂度为:
力扣测试结果: