leetcode-67. 二進位制求和
一、問題描述
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1
和 0
。
示例 1:
輸入: a = "11", b = "1" 輸出: "100"
示例 2:
輸入: a = "1010", b = "1011" 輸出: "10101"
二、程式碼和思路
1.首先記錄兩個字串長度的大小,取長度大的字串為c,並建立一個空列表用來儲存沒對應位二進位制相加的結果
2.從後往前遍歷兩個字串直到遍歷完其中一個字串為止,用二進位制加法並將結果儲存到lst中,必要的話改變標誌位flag
3.從後往前從lst中取元素,用str的加法結合所有元素返回
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
m,n=len(a),len(b)
lst=[]
c=a if m>n else b
i=-1
j=-min(m,n)
flag=0
while i>=j:
if a[i]=='1' and b[i]=='1':
lst.append(flag)
flag=1
elif (a[i]=='1' and b[i]=='0') or (b[i]=='1' and a[i]=='0'):
lst.append(abs(flag-1))
else:
lst.append(flag)
flag=0
i -= 1
while i>=-len(c):
if c[i]=='1':
lst.append(abs(flag-1))
else:
lst.append(flag)
flag=0
i -= 1
if flag==1:lst.append(flag)
return_str=''
for i in range(len(lst)-1,-1,-1):
return_str += str(lst[i])
return return_str
三、執行結果