【leetcode】7. Reverse Integer(Python & C++)

本文详细解析了整数反转算法的两种实现方式:一种通过数学运算实现,适用于C++;另一种利用Python的字符串特性实现。文章提供了具体代码示例,并讨论了如何处理32位整数的溢出问题。

7. Reverse Integer

题目链接

7.1 题目描述:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

7.2 解题思路:

  1. 思路一:翻转整数,那就在x%10后赋给新的值sum,每次遍历前新的值先乘以10,再加上取余后的数。每次遍历后x都除以10,如果这个sum比int型最大还要大,或者比最小的还要小,则返回0。否则遍历结束后,返回sum即可。

  2. 思路二:分为c++和Python。

    1. c++:利用int型,当sum超出int型范围时,tsum与sum本来是10倍关系,这时不相等,返回0。遍历结束返回sum。
    2. Python:利用字符串直接reverse。先将int转换为字符串,直接[::-1]翻转。当然如果是负数,在转回int时乘以-1。最后判断是否超出边界条件即可。

7.3 C++代码:

1、思路一代码(12ms):

class Solution134 {
public:
    int reverse(int x) {
        if (x == 0)
            return 0;
        long long sum = 0;
        while (x)
        {
            sum = sum * 10 + x % 10;
            x = x / 10;
            if (sum > INT_MAX || sum < INT_MIN)
                return 0;
        }
        return int(sum);
    }
};

2、思路二代码(26ms)

class Solution134_1 {
public:
    int reverse(int x) {
        int sum = 0;
        while (x)
        {
            int tsum = sum * 10 + x % 10;
            x = x / 10;
            if (tsum/10 != sum)
                return 0;
            sum = tsum;
        }
        return sum;
    }
};

7.4 Python代码:

1、思路一代码(49ms)

class Solution(object):#failed
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        ssum=0
        flag=0
        x_max=2**31-1
        x_min=-2**31        
        if x>0:
            flag=1
        else:
            x=0-x
            flag=0
        while x>0:
            ssum=int(ssum*10+x%10)
            x=x/10
            if ssum>x_max or ssum<x_min:
                return 0
        if flag==1:
            return ssum
        else:
            return 0-ssum

2、思路二代码(48ms)

class Solution1(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        x_max=2**31-1
        x_min=-2**31
        if x<0:
            x=-1*int(str(0-x)[::-1])
        else:
            x=int(str(x)[::-1])
        if x > x_max or x < x_min :
            return 0
        return x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值