声明:
今天是第13道题。给定两个二进制字符串,返回他们的和(用二进制表示),输入为非空字符串且只包含数字 1
和 0
。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定两个二进制字符串,返回他们的和(用二进制表示),输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
解法1。利用Python封装好的函数,先把2个2进制的加数转换为10进制的,再把和转化为2进制的并返回
class Solution:
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
# V 1.0,能提交
sum_decimal = int(a,2) + int(b,2) # 把2进制转为10进制
return bin(sum_decimal)[2:] # 把加和的10进制转为2进制之后是以‘0b’开头的,所以返回第3位以后的内容
解法2。比解法1步骤多些,但用基本的步骤拆分开了,很细致,同样也是先把2个2进制的转为10进制的数,然后相加,再把相加之后的数转为2进制。但在LeetCode上提交有点问题,在Spyder上测试成功。
class Solution:
def addBinary(self, a, b):
# V 2.0,提交失败,但在Spyder上测试成功
import math
if len(a) == 0 or len(b) ==0:
return 0
if a == '0' or b == '0':
return 0
i = 0
int_a = int(a)
int_b = int(b)
decimal_a = 0
decimal_b = 0
sum_ab = 0
while int_a:
lower_bit = int_a%2
decimal_a += lower_bit * pow(2,i)
i += 1
int_a //= 10
i =0
while int_b:
lower_bit = int_b%2
decimal_b += lower_bit * pow(2,i)
i += 1
int_b //= 10
sum_ab = decimal_a + decimal_b
temp = []
while sum_ab:
lower_bit = sum_ab%2
temp.append(lower_bit)
sum_ab //= 2
result = ''
while temp:
result += str(temp.pop())
# result = int(result)
return result