整数反转
前沿说明:算法学习,日常刷题记录。
题目链接
题目内容
给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。
如果反转后整数超过32位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回0。
假设环境不允许存储64位整数(有符号或无符号)。
// 示例1:
输入:x = 123
输出:321
// 示例2:
输入:x = -123
输出:-321
// 示例3:
输入:x = 120
输出:21
// 示例4:
输入:x = 0
输出:0
// 提示:
-2^31 <= x <= 2^31 - 1
复制代码
分析过程
定义sum为反转后的整数,初始值为0,每一次得到的余数都加上sum乘以10,最后就会得到反转后的整数。
- 我们举例是 123。
- 那么第一次得到 3, 0×10+3 = 3
- 第二次得到 2, 3×10+2 = 32
- 第三次得到1,32×10+1 = 321
- 刚好就是123反转过来的321。
解答代码:
class Solution {
public int reverse(int x) {
int n = x;
if (x < 0) {
// 若是负数,乘以-1
x = x * -1;
}
// 保存反转的整数
int sum = 0;
// 循环判断除以10是否为0,不断取x的最后位的数字
while (x > 0) {
// 通过取余,获得x最后位的数字
int m = x % 10;
// 反转整数暂时保存起来
int temp = sum;
// 乘以10加上余数,每次乘以10,每次都会扩大10倍,最后得到结果减去最末位,但是这里最后又加上了最末位m,因为x不断除以10得到的是反过来的数字,所以这里刚好就得到反转后的整数
sum = sum * 10 + m;
if (sum / 10 != temp) {
// 通过和之前一个对比,可以判断是否溢出
return 0;
}
// x除以10减去最右边的位
x = x / 10;
}
if (n < 0) {
// 若是负数,再乘回-1
sum = sum * -1;
}
return sum;
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END