leetcode第7题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/82725662

题目:将一个数字翻转,但是如果超出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的切片处理

猜你喜欢

转载自blog.csdn.net/little_white__/article/details/82725662