1. 程式人生 > >leetcode第7題

leetcode第7題

題目:將一個數字翻轉,但是如果超出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

遇到的問題:

  1. c++中,2e31是double型別,不能直接與x作比較
  2. Python中// 是整除
  3. python的切片處理