题目描述
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321示例 2:
输入: -123
输出: -321示例 3:
输入: 120
输出: 21注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
解决方法
123 -> 321的过程
- res = 0
- 获取个位g
- res = res * 10 + g
- 原值 /= 10
- 重复2 3步骤直到原值为0
反转的算法有了,还差个溢出判断。
a为原值,d为新值,c为个位,如果不溢出的话可以通过a*10+c=d,a=(d-c)/10
互相转换
根据上述可得以下代码
public int reverse(int x) {
int res = 0;
while (x != 0) {
int remainder = x % 10;
int newRes = res * 10 + remainder;
if ((newRes - remainder) / 10 != res) // 如果有溢出则无法回退到原来的结果
return 0;
res = newRes;
x /= 10;
}
return res;
}
时间复杂度:O(log(x)),x为要反转的数字
空间复杂度:O(1)