給定兩個二進位制字串,返回他們的和(用二進位制表示)。解法一:迴圈遍歷輸入為非空字串且只包含數字 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 第乙個位子若產生進製需要...