题目
Reverse digits of an integer.
Example1: x = 123, return 321Example2: x = -123, return -321
click to show spoilers.
**Note:
**The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
思路
基本的模运算与整除运算。判断溢出这个倒是有点新奇,不过也不难。
实现
class Solution {
public:
int reverse(int x) {
long long ans=0, base1=1, base2=1;
while(x/(base1*10)!=0){
base1*=10;
}
while(x/base2!=0){
ans += ((x/base1)%10) * base2;
base1/=10;
base2*=10;
}
if(ans>INT_MAX || ans<INT_MIN) return 0;
return ans;
}
};
思考
走了很多歪路,不过也有了一些体会:
一是用两个基来取得输入和输出的某一位比用其指数要快一些;
二是判断溢出可以用符号来判断也可以用long long配合范围来判断,这两者孰优孰劣还真不好说。
三是从简单程度上来看,用long long 进行运算,再判断范围会比较清晰。
四是可以改进,不需要两个基就可以得出答案,比如:
class Solution {
public:
int reverse(int x) {
long long res = 0;
while(x) {
res = res*10 + x%10;
x /= 10;
}
return (res< INT_MIN|| res>INT_MAX) ? 0 : res;
}
};