67 二進位制求和

2021-09-20 10:20:34 字數 2678 閱讀 6004

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 1 和 0。

示例 1:

輸入: a = 「11」, b = 「1」

輸出: 「100」

示例 2:

輸入: a = 「1010」, b = 「1011」

輸出: 「10101」

class

solution

:def

addbinary

(self, a:

str, b:

str)

->

str:

len_a =

len(a)

len_b =

len(b)

i = len_a -

1 j = len_b -

1

carry =

0

l =# 兩個二進位制數 都還沒遍歷完

while i >=

0and j >=0:

ifint

(a[i])+

int(b[j]

)+ carry ==0:

0)elif

int(a[i])+

int(b[j]

)+ carry ==1:

1)carry =

0elif

int(a[i])+

int(b[j]

)+ carry ==2:

0)carry =

1else:1

) carry =

1

i -=

1 j -=

1# a 被遍歷完

if i <0:

while j >=0:

ifint

(b[j]

)+ carry ==0:

0)elif

int(b[j]

)+ carry ==1:

1)carry =

0else:0

) carry =

1 j -=

1# b被遍歷完

else

:while i >=0:

ifint

(a[i]

)+ carry ==0:

0)elif

int(a[i]

)+ carry ==1:

1)carry =

0else:0

) carry =

1 i -=

1# 當最後還有進製時 +1

if carry ==1:

1)# 反轉 使二進位制和為正確順序

l.reverse(

) result =

""for i in

range

(len

(l))

: result +=

str(l[i]

)return result

class

solution

:def

addbinary

(self, a:

str, b:

str)

->

str:

len_a =

len(a)

len_b =

len(b)

i = len_a -

1 j = len_b -

1

carry =

0

result =

""while i >=

0or j >=0:

if i >=0:

p =int(a[i]

)else

: p =

0if j >=0:

q =int(b[j]

)else

: q =

0

temp = p + q + carry

result =

str(temp %2)

+ result

carry = temp //

2

i -=

1 j -=

1if carry ==1:

result =

"1"+ result

return result

class

solution

:def

addbinary

(self, a:

str, b:

str)

->

str:

num =

int(a,2)

+int

(b,2

)

result =

bin(num)

return result[2:

]

67 二進位制求和

一 題意 給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 二 分析和解答 public string addbinary string a,str...

67 二進位制求和

雖然自己也寫對了,但是 非常不簡潔,還是答案的 簡潔,應該學習下 答案 class solution index 0 找到第乙個不為0的位置 while res index 0 index len index 如果結果為0,就直接返回0 if index len 1 return 0 return ...

67 二進位制求和

解題思路 1.將兩個字串用0補成長度相等的兩個字串,即比較兩個字串的長度,長度較小的補0 2.準備乙個變數,用來表示當前的進製值,初始值為0 3.遍歷兩個字串,計算當前索引位置兩個字元和進製累加後的結果 4.第3步計算得到的結果對2取餘便是結果字元 實現如下 class solution if le...