【LeetCode 简单题】13-二进制求和

声明:

今天是第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
    

结尾

解法1:https://blog.csdn.net/IT_job/article/details/80207305

解法2:https://www.jianshu.com/p/1f6a621c9283

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/82682320