Leetcode - 67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为非空字符串且只包含数字1和0。
示例 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'))


浙公网安备 33010602011771号