LeeCode每日一题--二进制求和

  【前言】坚持日更LeeCode刷题系列

    不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!


  【题目】67.二进制求和

    题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0。


    示例:

    	示例 1:
    		输入: a = "11", b = "1"
			输出: "100"
			
		示例 2:
			输入: a = "1010", b = "1011"
			输出: "10101"

    思路一:如果看过我上题的朋友,会感到此题非常的熟悉,那么具体思路如下,我们先将字符串转化为整数的形式,再对其进行加法处理,通过从后往前遍历列表的方式,对于‘2’以及‘3’(有朋友可能会疑惑怎么会出现‘3’,别急,请接着看下去)我们将其分别置为‘0’和‘1’,并对其前一位数字进行加一操作
    注意因为是对前一位数字进行加一操作,因此我们循环遍历到第二位数字,并对第一位数字单独进行判断操作。具体代码如下:

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        '''
        说明:对于其中类型转化问题,可以自行百度相关的知识。
        '''
        a = int(a)
        b = int(b)
        result = list(str(a+b))  
        for i in range(len(result)-1,0,-1):  #从后往前遍历
            if(result[i] == '2' ):  #对数码位为2的情况进行处理
                result[i] = '0'   
                result[i-1] = str(int(result[i-1])+ 1) 
            elif(result[i] == '3'): #对数码位为3的情况进行处理
                result[i] = '1'
                result[i-1] = str(int(result[i-1])+ 1)
        if result[0] == '2':  #对第一位数字单独进行考虑
            result[0] = '0'
            result.insert(0,'1')
        elif result[0] == '3':
            result[0] = '1'
            result.insert(0,'1')
        result = ''.join(result)
        return result

    运行结果:
在这里插入图片描述

    思路二:由于是二进制问题,可能有朋友会想到通过位操作的方法来实现,那其中的逻辑是怎样的呢?那让我们来尝试下。具体代码如下(参考自LeeCode官方解答):

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        a = int(a,2)  #将其转化为整数
        b = int(b,2)  
        while b:
            result = a^b  #亦或操作只有两位均为‘1’时对整体有影响,而这也是我们所想要的操作
            carry = (a&b) << 1 #与操作可以得出在哪一位有了进位,再通过左移操作即完成了前一位的加一操作
            a = result
            b = carry
        return bin(a)[2:]

    运行结果:
在这里插入图片描述
    关于其中一些知识的链接:

    Python 位运算
    Python int函数

    思路三:调用python内函数,不建议这样解答。具体代码如下:

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        return bin(int(a,2)+int(b,2))[2:]

    运行结果:
在这里插入图片描述

    关于其中一些知识的链接:

    算法题解


    分享就到这里了,欢迎大家一起交流讨论。


    注明

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-binary/

发布了32 篇原创文章 · 获赞 62 · 访问量 1311

猜你喜欢

转载自blog.csdn.net/Mingw_/article/details/104736501