Leetcode:翻转整数
题目
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
解法
首先想到一个复杂度非常高的方案:
class Solution {
public:
int reverse(int x) {
long long flag=1,res=0;
if(x<0)
{
flag=-1;
x=-x;
}
vector<int> num;
while(x!=0)
{
num.push_back(x%10);
x=x/10;
}
for(int i=0;i<num.size();++i)
{
res=res*10+num[i];
}
if(res<-2147483648 || res>2147483647)
return 0;
else
return flag*res;
}
};
值得注意的是,这里由于要考虑32位溢出的情况,所以需要用long long
类型;进一步想到,其实此处利用vector完全是没有必要的,代码可以更加简洁:
class Solution {
public:
int reverse(int x) {
long long res=0;
while(x!=0)
{
res=10*res+x%10;
x/=10;
}
return (res>INT_MAX || res<INT_MIN)?0:res;
}
};
作者:YunLambert
-------------------------------------------
个性签名:一名会音乐、爱健身的不合格程序员
可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾