二進位制數求和

2021-10-03 08:11:11 字數 1449 閱讀 4284

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

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

示例 1:

輸入: a = "11", b = "1"

輸出: "100"

示例 2:

輸入: a = "1010", b = "1011"

輸出: "10101"

解法一:迴圈遍歷

設定乙個進製標誌sign,初始化為0。將a和b轉為二進位制數後,從最低位開始逐位相加,再加上產生的進製sign。

class solution(object):

def addbinary(self, a, b):

""":type a: str

:type b: str

:rtype: str

"""la = len(a)

lb = len(b)

c = [none for i in range(max(la,lb))]

if la > lb: # 把兩個擴充到統一長度,方便逐位相加

b = '0' * (la-lb) + b

elif la < lb:

a = '0' * (lb-la) + a

sign = 0

for i in range(max(la, lb)-1, -1, -1):

if int(a[i]) + int(b[i]) + sign == 2:

c[i] = 0

sign = 1

elif int(a[i]) + int(b[i]) + sign == 3:

c[i] = 1

sign = 1

else:

c[i] = int(a[i]) + int(b[i]) + sign

sign = 0

c = ''.join(map(str, c))

if sign == 1:

c = '1' + c

return c

解法二:位運算

考慮a='101', b='111',轉為二進位制數後,則a^b = 010,a & b =101,期望的輸出為'1000'

分析:

class solution(object):

def addbinary(self, a, b):

""":type a: str

:type b: str

:rtype: str

"""a, b = int(a, 2), int(b, 2)

while true:

a, b = a ^ b, (a & b) << 1

if b == 0:

break

return bin(a)[2:]

參考:

二進位制求和

給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 1 使用jdk進製轉化 1,第一時間想到使用jdk自帶方法,將給定的二進位制數轉化為十進位制 2,...

二進位制求和

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

二進位制求和

給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。str儲存了所有a b的累加值。for int k str.length 1 k 0 k 在累加過程中會出現值為3的位子,則將本位子置1,然後進1 if str.charat k 3 第乙個位子若產生進製需要...