原题链接
7.整数反转
菜狗本菜的解答初思路
class Solution {
public:
int reverse(int x) {
int n;
vector <int> a;
while (x!=0){
n=x%10;
a.push_back(n);
x/=10;
}
long b=0;
int len=a.size();
for (int i=0;i<len;i++){
b=b*10+a[i];
}
return b;
}
};
错误原因
没有设置返回0的情况导致出现了runtime error
菜狗本菜的解决方案
class Solution {
public:
int reverse(int x) {
int n;
vector <int> a;
while (x!=0){
n=x%10;
a.push_back(n);
x/=10;
}
long b=0;
int len=a.size();
for (int i=0;i<len;i++){
b=b*10+a[i];
}
return b>INT_MAX || b<INT_MIN ? 0:b;
}
};
在这里运用了三目运算符的知识,INT_MAX和INT_MIN分别代表了有符号整数类型的最大值和最小值。这样就可以返回0了。
执行用时: 4 ms 内存消耗: 6 MB
所以这个代码段是非常菜的,它不仅用时长,内存消耗也长。
经优化后如下
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;
}
执行用时:0 ms 内存消耗:5.8 MB
|