如何解决反转整数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;
}
}
解决方法
将分支条件绘制为树状图而不是单线公式时,有时更容易理解。
另外,我们可以这样写树:
├── OR
│ ├── (rev > Integer.MAX_VALUE/10)
│ └── AND
│ ├── rev == Integer.MAX_VALUE / 10
│ └── pop > 7
想象一下,rev
是一个容器,如饼干罐或纸板箱。
可以塞进饼干罐的饼干数量是有上限的。
当 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 时,数字的小数部分将被丢弃。
当 rev
为 214,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)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。