513,919
社区成员
发帖
与我相关
我的任务
分享题目来源 https://leetcode-cn.com/problems/reverse-integer/
等级:简单
刚开始别看着人家写的是简单的。那是我应该认为的吗?嗯?
给你一个 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 / 10 && temp > 7)){
return 0;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && temp < -8)){
return 0;
}
x /= 10;
res = res * 10 + temp;
}
return res;
}
}
原文链接 https://blog.csdn.net/qq_43585922/article/details/120932267
欢迎各位一起来交朋友
学习,打卡
写的很赞,支持一下,打卡
加油!!!