首页 > 解决方案 > 为什么添加二进制数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] 感谢您的回复!

标签: pythonalgorithmbinary

解决方案


当然,代码可以从“左到右”收集数字,如下所示:

        result = str(carry %2) + result

...然后在最后省略反转。它不会对输出产生影响。可能作者认为这样做+=会提高性能,即使考虑到反转操作也是如此。在我的测试中,我可以确认这种性能提升。

请注意,无论哪种方式,输入值都是从右到左读取的,因为数字是从两个列表中获取的pop()。只是结果数字的位置被颠倒了。


推荐阅读