JAVA小白自学中
整数反转
题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2……31, 2……31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
标题示例
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
代码
class Solution {
public int reverse(int x) {
long a, b, c, d;
b = 0;
c = 1;
d = 2147483648L;
if (x == -2147483648) {
return 0;
}
if (x < 0) {
x = -x;
c = -1;
}
for (long i = x; i != 0; i = i / 10) {
a = i % 10;
if (i < 10) {
b = b + a;
} else {
b = (a + b) * 10;
}
if (b > d) {
b = 0;
break;
}
}
d = b * c;
int fh = (int) d;
return fh;
}
}
解题思路
数值范围为 [-2147483648, 2147483647],超出输出0
a:对10取余,储蓄本轮数据;
b:保存上一轮数据;
c:保存符号
d:保存int最大值,与最后保留整体值
i:循环判断保存X的值并判断X与除10(步进)
fh:做为最终返回值,保存d强制转换为int的值
输出异常,当x值为-2147483648时
不知道为什么会输出47
最终选择将x先做判断
若x值为-2147483648
则直接返回0
声明
以上内容为本人对此题的处理方法
若有侵权,请在下方回复中举证并@本人删除文章
本人小白一枚,自学的JAVA
愿大家都能找到比我更加优秀的方法
若有知道为什么会输出异常的大佬
也请@我讲解一下,提前谢谢大佬了
在此鸣谢
leetcode平台与CSDN平台的支持
还有各位的捧场