leetcode第7題
阿新 • • 發佈:2018-12-10
題目:將一個數字翻轉,但是如果超出int_32的表示範圍,則輸出0
C++: 注意要在溢位前判斷。
int reverse(int x) {
int num = 0;
int flag = 1;
if(x < 0)
{
x = -x;
flag = 0;
}
while(x)
{
if(num > (INT_MAX - x % 10) / 10 || num < (INT_MIN + x % 10)/10 )
return 0;
num = num * 10 + x % 10;
x = x / 10;
}
if(!flag)
num = -num;
return num;
}
};
Python: 解法一:按照C++的思想做。
def reverse(self, x):
num = 0
flag = 1
if x < 0:
x = -x
flag = 0
while(x):
num = num * 10 + x % 10
if num > 2**31 - 1 or num < -2**31:
return 0
x = x // 10
if flag == 0:
num = -num
return num
解法二:採用字串直接翻轉,需要注意負數
def reverse(self, x):
x = str(x)[::-1]
if x[-1] == '-' :
x = x[-1] + x[:-1]
x = int(x)
if x > 2**31 - 1 or x < -2**31:
x = 0
return x
遇到的問題:
- c++中,2e31是double型別,不能直接與x作比較
- Python中// 是整除
- python的切片處理