一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
思路
整数反转题目,只要搞清楚了思路,就很好做,如果把数传进去,进行循环,每次循环都取当前数的尾数,然后将得到的数进行拼接,也就是每次都将之前的数进位再加上当前数。依次循环,就可以完成这个题目,但是在每次进行计算之前,需要判断一些是否数值溢出了,溢出了直接返回0,代表该数不能够进行反转。思路其实还是很简单,就是取最后一个尾数,然后将尾数进行进位,再加上当前数。
代码
public static int reverse(int x) {
int res = 0;
while (x != 0) {
//每次取末尾数字
int tmp = x % 10;
//判断是否 大于 最大32位整数
if (res > 214748364 || (res == 214748364 && tmp > 7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res < -214748364 || (res == -214748364 && tmp < -8)) {
return 0;
}
res = res * 10 + tmp;
x /= 10;
}
return res;
}
public static void main(String[] args) {
int i=1000;
System.out.println(reverse(i));
int i1=4523;
System.out.println(reverse(i1));
int i3=63546;
System.out.println(reverse(i3));
int i4=-867;
System.out.println(reverse(i4));
}
运行结果
1
3254
64536
-768
总结
整数反转,思路其实不算复杂,对算术运算有点基础,然后仔细想一想,就可以得到大概的思路,得到思路再进行代码的编写,优化,再写出自己的题解,差不多这个题目就拿下了。坑点就在于整数溢出的计算,需要多考虑一下,我暂时是自己没想好,复用了网上大佬们的计算来直接用的