Leetcode-整数反转
题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题
刚开始的思路是将int型的数字转换为string型,再将string逆序,再转换为int型。
double y;
stringstream ss;
ss<<x;
string str1=ss.str();
string str2;
if (str1[0]=='-')
{
str2=string(str1.rbegin(),str1.rend());
str2="-"+str2;
}
else{
str2=string(str1.rbegin(),str1.rend());
}
ss.str("");
ss<<str2;
ss>>y;
if(y<=-2147483648||y>=2147483647)
return 0;
return y;
在Leetcode上运行的时间是40ms,应该是类型转换降低了性能。
然后想着怎么用数字的方法逆序。
其实很简单,只要把每一位数字倒着取出存进新的变量中就好了,但是要注意int型的溢出检查。
int reverse(int x) {
long res=0;
while(x){
res=res*10+x%10;
x=x/10;
}
return (res > INT_MAX || res < INT_MIN) ? 0 : res;
}
发现提交后最快的执行用时是16ms,但是在Leetcode上执行同一代码的时间可能每次不太一样,我第一次执行这个代码的执行用时是40ms,后来多试几次感觉执行时间会快一点。
看到别人提交最快的执行用时是4ms,感觉自己差距还是很大啊。