反转整数python 示例 1:示例 2:示例 3:示例 4:

问题描述

我正在尝试解决 Python 中的 Leetcode“反向整数”挑战。

我查看了他们提供的解决方案。
他们的回答是用 Java 写的。
我不知道他们为什么使用以下测试条件:

    if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
    
    if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;

我在没有相同测试条件的情况下编写了我的 python 代码。 当我测试一个负数时它失败了。

     class Solution:
    
        def reverse(self,x: int) -> int:
            rev = 0
            while( x != 0 ):
                pop = x % 10
                x //= 10
                rev = rev * 10 +pop
            print(rev)    
            return rev

我不明白为什么他们的代码中存在特定的测试条件。

目标是反转整数中的数字顺序。
一些示例如下所示:

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123 输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

解决方法

将分支条件绘制为树状图而不是单线公式时,有时更容易理解。

TREE

另外,我们可以这样写树:

├── OR
│   ├── (rev > Integer.MAX_VALUE/10)
│   └── AND
│       ├── rev == Integer.MAX_VALUE / 10
│       └── pop > 7

想象一下,rev 是一个容器,如饼干罐或纸板箱。

COOKIE_JAR_PICTURE

可以塞进饼干罐的饼干数量是有上限的。

rev == Integer.MAX_VALUE 表示饼干罐已满。

条件 rev == Integer.MAX_VALUE/ 10 表示 cookie-jar 只能再装一个 cookie。

我们不是将 cookie 塞进 cookie 罐中,而是将数字(例如 5)塞进一个整数中。

整数是容器。

请注意,在以 10 为底的整数后附加零时,与乘以 10 相同。例如,25 变为 250

假设允许的最大整数是2,147,483,647

注意 214,748,364 等于 2,647 / 10

除以 10 时,数字的小数部分将被丢弃。

rev214,364 时,您可以在最右端附加任何整数,只要该数字小于或等于 7。

旧元素 新元素 新容器 状态
214748364 0 2147483640 有效
214748364 1 2147483641 有效
214748364 2 2147483642 有效
214748364 3 2147483643 有效
214748364 4 2147483644 有效
214748364 5 2147483645 有效
214748364 6 2147483646 有效
214748364 7 2147483647 有效
214748364 8 2147483648 太大了
214748364 9 2147483649 太大了

上表中的“状态”列

在他们的代码中,当他们编写 (pop > 7) 时,它可能应该是 (pop > Integer.MAX_VALUE % 10)

假设允许的最大整数是2,647

那么,2,647 % 10 等于 7

有很多很多不同的方法可以反转数字的数字。

python 中的一种解决方案如下所示:

x = int(reversed(str(x)))