67. 二进制求和
一、问题描述
二、补充知识
1、平方的表示
(1)3^2要表示为3**2;
(2)使用pow(x,y)函数,其表示x的y次方。
pow(3,2)
2、类中的方法如何互相调用
(1)使用self.方法名调用,如:self.two_to_ten(a);
(2)使用类名.方法名()调用:sum2 = Solution.two_to_ten(self,b)。
三、算法思想
1、先定义两个函数。一个用来十进制转换成二进制;另一个用来二进制转换成十进制。
2、题目中给的是二进制形式的字符串,利用for循环依次从前往后获取字符串中的每个字符,然后强制转换成int类型的,接着再利用数学方法把其转换成十进制的数,定义一个变量sum接收它们的和。最终得到的结果就是题目给出的字符串对应的十进制数。
3、把转换后的两个十进制数相加,得到最终结果,再利用十进制数转二进制的函数把其转换成二进制的数。因为题目要求返回的是字符串类型,所以最后要再转换成字符串返回。
四、代码
class Solution(object):
def two_to_ten(self,x):
sum = 0
length = len(x)
j = 0
for i in x:
i = int(i)
#sum += i * (2 ** (length - 1 - j))
sum += i * pow(2,(length - 1 - j))
j += 1
return sum
def ten_to_two(self,x):
str1 = ''
if x == 0:
return '0'
while x != 1:
str1 = str(x % 2) + str1
x = x // 2
if x == 1: # 当最后等于1时也要把其加到字符串里,因为等于一没进循环,所以要补上一步
str1 = '1' + str1
return str1
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
sum1 = self.two_to_ten(a)
#sum2 = self.two_to_ten(b)
sum2 = Solution.two_to_ten(self,b)
sum = sum1 + sum2
result1 = self.ten_to_two(sum)
return result1