Loading

Leetcode - 67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为非空字符串且只包含数字10

示例 1:

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

示例 2:

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

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 104
  • 字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解1 2021/9/9 O(n)

def addBinary(a: str, b: str) -> str:
    # 这题没法直接用内置函数计算,题限定了a,b长度∈[1,10^4]
    # 太大了
    # 正常算也是很简单的
    lena=a.__len__()
    lenb=b.__len__()
    # 为了方便,换一换,a是长的那个
    tmp=''
    if lena<lenb:
        tmp=a;a=b;b=tmp
        lena=lena+lenb
        lenb=lena-lenb
        lena=lena-lenb
    # python的str没法赋值,本来可以直接存a里的
    res=[]
    jinwei=0
    for i in range(lenb-1,-1,-1):
        ### 错误 - 1
        #va=int(a[i])
        va=int(a[lena-lenb+i])
        ### 错误 - 1
        vb=int(b[i])
        v=va+vb+jinwei
        jinwei=v//2
        v%=2
        res.append(v)
    for i in range(lena-lenb-1,-1,-1):
        v=int(a[i])+jinwei
        jinwei = v // 2
        v %= 2
        res.append(v)
    if jinwei: res.append(jinwei)
    return ''.join(str(c) for c in reversed(res))

if __name__ == '__main__':
    # 100
    print(addBinary('1','11'))
    # 10101
    print(addBinary('1010','1011'))
    print(addBinary('1','1111'))
    ### 错误
    # 1
    print(addBinary('100','110010'))

posted @ 2021-09-09 18:49  wwcg2235  阅读(29)  评论(0)    收藏  举报