系列文章目录
前言
每天进步一点点!!
一、背景
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
二、我的思路
这个简单啊!考虑负数看成正数,然后每次求余,再乘以10就ok了。
但是,考虑特殊情况,如果超过int范围,需要返回0,其次,比较一个数是否超过INT_MAX,不能先把那个数算出来,因为算不出来(系统没法存),所以要用技巧,在超过的数*10之前去判断,是否大于INT_MAX/10.
代码如下:
class Solution {
public:
int reverse(int x) {
uint _MAX=2147483648;
int a=abs(x);//取绝对值
int sum=0;
if(a==0) return a;
while(a!=0)
{
if(sum>(_MAX/10))
{
return 0;
}
else{
sum=sum*10+a%10;
a=a/10;
}
}
if(x<0) return -sum;
else return sum;
}
};
我的代码还是比较啰嗦,实际不用分正负。
三、官方的思路
官方和我一样,注意细节就可以。
if (rev < INT_MIN / 10 || rev > INT_MAX / 10)
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode-solution-bccn/
来源:力扣(LeetCode)
四、网友的思路
存储的话,用无符号整数去存就可以了。无需注意细节,啊啊啊!!!
class Solution {
public:
int reverse(int x) {
long n = 0;
while (x)
{
n = n * 10 + x % 10;
x /= 10;
}
return n > INT_MAX || n < INT_MIN ? 0 : n;
}
};
代码来自力扣用户:弋 yin1234
该用户力扣页面:https://leetcode-cn.com/u/yin1234/
总结
注意细节,超过Int最大时,考虑判断。
喜欢就点个赞叭!!!
本文介绍了一道力扣题目“反转整数”的多种解法,包括个人解法、官方解法及网友提供的简洁方案。重点在于如何正确处理反转过程中可能出现的溢出问题。


被折叠的 条评论
为什么被折叠?



