7. Reverse Integer
题目链接:7. Reverse Integer
题意
将给定的int型整数翻转,不包括负号,如果整数以0结尾,反转后开头的0不保留。
坑
翻转的结果可能超过int的表示范围,如果超出范围返回0。
解法
先将整数转变为它的绝对值,每次将整数的末位数字压入一个队列中,然后将队列中的个位数每次从队首取出一个,添加到一个long long类型变量末尾,最后将该变量与INT_MAX比较,如果大于INT_MAX,返回0,否则先强制类型转换为int类型,然后根据原整数的符号决定是否将结果变为附属再返回。
代码
class Solution {
public:
int reverse(int x) {
long long result=0, maxNeg=2147483648;
queue<int> s;
long long temp = abs((long long)x);
while(temp){
s.push(temp % 10);
temp/=10;
}
/**
如何检验翻转后的数字是否溢出int的表示范围
1.先将翻转结果用long long类型表示,然后与INT_MAX比较,若不溢出再强制类型转化为int
*/
if(!s.empty()){
result+=s.front();
s.pop();
}
while(!s.empty()){
result*=10;
result+=s.front();
s.pop();
}
if(result > INT_MAX){
return 0;
}else{
if(x > 0) return (int)result;
else return (int)-result;
}
}
};
算法复杂度
算法复杂度为O(n)。