LeetCode刷题-67. 二进制求和(python)

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

 

解题思路:

逆序遍历 a 和 b 两字符串,如果 a + b  = 0(sum) 就说明两个全部都是 0 ,ans(结果) 就直接 追加(sum%2) 0 ,如果a + b = 1, ans 就直接追加 1 , 如果a + b = 2, 就说明两个全部为 1 , ans 还是追加 0 ,但是进位(jin)设置为 1 ,在遍历下一次的时候,直接让 sum = jin ,就考虑到了进位的问题。 

ord函数: 将字符串转换成 ascii

字符串逆序:[::-1]

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        jin,sumab,ans = 0,0,''
        i =len(a) - 1
        j = len(b) - 1
        while i >=0 or j >= 0:
            sumab = jin
            sumab +=  ord(a[i]) - ord('0')  if i >= 0 else 0
            sumab +=  ord(b[j]) - ord('0')  if j >= 0 else 0
            ans += str(sumab%2)
            jin = int(sumab/2)
            i -= 1
            j -= 1
        if jin > 0:
            ans += str(jin)
        return ans[::-1]

 


版权声明:本文为bi_diu1368原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。