LeetCode7 Reverse Integer 題解(數的逆序)
阿新 • • 發佈:2019-01-08
LeetCode7 Reverse Integer 題解
題目
Given a 32-bit signed integer, reverse digits of an integer.
輸入輸出例項
input:123
output:321
intput:120
output:21
input:-123
output:-321
核心演算法
int result = 0;
while(n!=0){
result = result*10+n%10;
n /= 10;
}
其他注意的地方
考慮特殊情況,有時需要特判
如 input:0
input:-2147483648(即INT_MIN)
資料溢位:
如:long long a = 1<<31-1;
等號右邊溢位 1預設為int型,1<<31溢位
修改:long long a = 1ll<<31-1
或者 long long a = INT_MAX;
程式碼
class Solution {
public:
int reverse(int x) {
string s;
if(x>=0){
long long result = 0;
while(x!=0){
result = result*10 +x%10;
x/=10;
}
if(result<=INT_MAX)
return result;
else
return 0;
}else{
long long a = x;
a = -1ll*a; //注意,若直接使用x=-1*x的話,當遇到輸入x為INT_MIN時,會出現資料溢位
long long result = 0 ;
while(a!=0){
result = result*10+a%10;
a/=10;
}
if(result<=1ll<<31) //注意:若使用1<<31,會出現資料溢位(1預設為int型) int的資料範圍為[-1<<31 - 1<<31-1]
return (-1*result);
else
return 0;
}
}
};