leetcode 67 二進位制求和

2021-10-08 09:06:38 字數 2023 閱讀 7459

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...