python - 为什么添加二进制数python时顺序无关紧要
问题描述
在添加二进制数时遇到了一个非常简洁的解决方案
class Solution:
def addBinary(self, a: str, b: str) -> str:
carry = 0
result = ''
a = list(a)
b = list(b)
while a or b or carry:
if a:
carry += int(a.pop())
if b:
carry += int(b.pop())
result += str(carry %2)
carry //= 2
return result[::-1]
对我来说,从右到左读取数字很直观,在这种情况下,结转的 1 (1+1=10) 也将是从右到左。那么为什么从左到右读取它并反转它是相同的,即使说字符串 a 和 b 的长度不同?
[编辑] 误解并假设他为什么这样做[::-1] 感谢您的回复!
解决方案
当然,代码可以从“左到右”收集数字,如下所示:
result = str(carry %2) + result
...然后在最后省略反转。它不会对输出产生影响。可能作者认为这样做+=
会提高性能,即使考虑到反转操作也是如此。在我的测试中,我可以确认这种性能提升。
请注意,无论哪种方式,输入值都是从右到左读取的,因为数字是从两个列表中获取的pop()
。只是结果数字的位置被颠倒了。
推荐阅读
- java - java - 如何检查CSV文件中是否存在特定数据?
- c++ - 作为键的向量如何在 C++ 内部工作?
- sql-server - 在 SQL 中将 XML 列数据分解为行
- android - FirebaseMLException:找不到翻译模型文件
- python - 对随机数进行采样直到它不存在于集合中的更优雅的方法是什么?
- swift - 按下 NavigationLink 时的 SwiftUI 操作
- spring-boot - 在 JUnit 的另一个方法中没有调用方法
- mule - 如果监视文件夹不存在,我如何运行一些代码?
- ionic-framework - 本地地理定位离子手表位置在后台工作,但在手机锁定时不工作
- doxygen - Doxygen:使 C++ 的高亮代码具有与 Visual Studio 相同的颜色