67二进制求和题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例
输入: a = “11”, b = “1”
输出: “100”
输入: a = “1010”, b = “1011”
输出: “10101”
解答
类似的求和问题已经出现过多次
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
len_a = len(a)
len_b = len(b)
# 如果位数不等,在左端补零
if len_a>len_b:
b = "0"*(len_a-len_b) + b
length = len_a
elif len_a<len_b:
a = "0"*(len_b-len_a) + a
length = len_b
else:
length = len_a
ans = ""
carry = 0 # 进位
flag = False # 记录最高位是否进位
for i in range(length-1,-1,-1):
sum_bit = carry + int(a[i]) + int(b[i])
if sum_bit<2:
carry = 0
ans = str(sum_bit) + ans
else:
if i != 0:
carry = 1
ans = str(sum_bit-2) + ans
else:
flag = True
ans = str(sum_bit-2) + ans
# 最高位有进位,在最前面添上新的最高位
if flag==True:
ans = str(1) + ans
return ans
415字符串相加题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解答
class Solution(object):
def addStrings(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
len1 = len(num1)
len2 = len(num2)
# 如果位数不等,在左端补零
if len1>len2:
num2 = "0"*(len1-len2) + num2
length = len1
elif len1<len2:
num1 = "0"*(len2-len1) + num1
length = len2
else:
length = len1
ans = ""
carry = 0 # 进位
flag = False # 记录最高位是否进位
for i in range(length-1,-1,-1):
sum_bit = carry + int(num1[i]) + int(num2[i])
if sum_bit<10:
carry = 0
ans = str(sum_bit) + ans
else:
if i != 0:
carry = 1
ans = str(sum_bit-10) + ans
else:
flag = True
ans = str(sum_bit-10) + ans
# 最高位有进位,在最前面添上新的最高位
if flag==True:
ans = str(1) + ans
return ans