- 一、题目
- 二、代码及思路
- 思路:
- 代码:
题目来源
等 级 : 简 单 textcolor{OrangeRed}{等级:简单} 等级:简单
刚开始别看着人家写的是简单的。那是我应该认为的吗?嗯?
给你一个 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二、代码及思路 思路:
先来认清楚这个概念,整形的范围
在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648。
对整形最大值加1,2147483648(超出范围了),那么此时值为多少呢?结果是-2147483648,即是Integer.MIN_VALUE。
不允许出现64位也就是不能有 long
给一个变量用来存储最终的结果,在循环里面进行判断,如果一个值大于最大值/10或者最小值/10了,我这里还判断了一下等于的,去掉后面的判断也没啥问题,等于的时候如果大于了最后一位或者小于最后一位同样就是越界了。还要往里面加值,那必会超出范围。
代码:class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
int temp = x % 10;
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE && temp > 7)){
return 0;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE && temp < -8)){
return 0;
}
x /= 10;
res = res * 10 + temp;
}
return res;
}
}
各位小伙伴,如果有更好的思路或者代码优化欢迎一起讨论
嘿 嘿 textcolor{CornflowerBlue}{嘿嘿} 嘿嘿



