一、题目
二、解答
1.思路
1.1 思路1
转成2个二进制数字相加,之后再转回字符串
1.2 思路2
遍历字符串挨个相加:
- 补齐2个字符串到同样长度
- while循环,如果指针>0不断循环
- 如果a短,给字符串前插入(a长度-b长度)的绝对值个0。如果b短,同理
- 指针减一
- 倒叙遍历字符串,依次累加;创建变量保存进位值;
- 如果需要进位:保存(a字符串此位置的值+b字符串此位置的值+进位值-2)的值到结果字符串;将进位变量赋值为1
- 如果不需要进位:保存(a字符串此位置的值+b字符串此位置的值+进位值)的值到结果字符串;将进位变量赋值为0
- 如果循环结束,还需要进位,再追加1到结果字符串前。
2.实现
2.1 实现1
class Solution(object):def addBinary(self, a, b):""":type a: str:type b: str:rtype: str"""# 思路1 转成二进制数字相加后再转回字符串return bin(int(a, base=2) + int(b, base=2))[2:]
2.2 实现2
class Solution(object):def addBinary(self, a, b):""":type a: str:type b: str:rtype: str"""# 思路2 逐位相加# 1补齐2个字符串max_len = max(len(a), len(b))subtract = abs(len(a) - len(b))while subtract > 0:if len(a) != max_len:a = '0' + aelif len(b) != max_len:b = '0' + bsubtract = subtract - 1# 进位plus = 0r = ''for i in list(range(max_len - 1, -1, -1)):# 需要进位if int(a[i]) + int(b[i]) + plus >= 2:r = (str(int(a[i]) + int(b[i]) + plus - 2)) + rplus = 1# 不需要进位else:r = (str(int(a[i]) + int(b[i]) + plus)) + rplus = 0if plus == 1:r = '1' + rreturn r