67. 二進位制求和
給你兩個二進位制字串,返回它們的和(用二進位制表示)。
輸入為 非空 字串且只包含數字 1 和 0。
示例 1:
輸入: a = 「11」, b = 「1」
輸出: 「100」
示例 2:
輸入: a = 「1010」, b = 「1011」
輸出: 「10101」
每個字串僅由字元 『0』 或 『1』 組成。
1 <= a.length, b.length <= 10^4
字串如果不是 「0」 ,就都不含前導零。
首先將字串變為鍊錶,並且兩者都進行翻轉,將長度較長的那乙個設定為a列表,短的設定為b列表
對兩者長度較長的列表長度進行迴圈,其中兩數相加的情況在 長度較小的範圍內進行。這裡設定了乙個flag用於表示進製資訊
當短鍊錶被加完之後,我們只對剩餘的長鍊錶和flag標誌位進行相加
class
solution
:def
addbinary
(self, a:
str, b:
str)
->
str:
m =len(a)
n =len(b)
flag =
0 a =
list
(a) b =
list
(b)if m < n:
#對鍊錶進行翻轉和交換,使得a始終最長
a, b = b[::
-1],a[::
-1]else
: a, b = a[::
-1], b[::
-1]for i in
range
(max
(m,n)):
# 1+1+f, 1+1, 1+0+f, 1+0, 0+0+f,0+0
if i <
min(m,n)
:#在兩數相加的情況下的各種判斷
if a[i]
== b[i]
and a[i]
=='0'
and flag ==0:
a[i]
='0'
continue
elif a[i]
== b[i]
and a[i]
=='0'
and flag ==1:
a[i]
='1'
flag =
0continue
elif a[i]
!= b[i]
and flag ==0:
a[i]
='1'
continue
elif a[i]
!= b[i]
and flag ==1:
a[i]
='0'
continue
elif a[i]
== b[i]
and a[i]
=='1'
and flag ==0:
a[i]
='0'
flag =
1continue
elif a[i]
== b[i]
=='1'
and flag ==1:
a[i]
='1'
continue
else
:#只有剩下的a和進製標誌位相加
if flag:
if a[i]
=='1'
: a[i]
='0'
else
: a[i]
='1'
flag =
0if flag ==1:
#最後如果還有進製,則新增一在末尾
'1')
return
''.join(a[::
-1])
Leetcode 67 二進位制求和
給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 class solution if blen 0 carry sum 2 錯誤的 if sum 2...
leetcode 67 二進位制求和
給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 新鮮現做 幸福coding class solution object def addbinary se...
leetcode 67 二進位制求和
給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例1 輸入 a 11 b 1 輸出 100 示例2 輸入 a 1010 b 1011 輸出 10101 解題思路 老老實實的採用了較為暴力的列舉法來作答,所以 較為複雜,且可讀性較差 class solut...