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

Mora ·
更新时间:2024-09-21
· 755 次阅读

  【前言】坚持日更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/


作者:Mingw_



leecode 进制 二进制

需要 登录 后方可回复, 如果你还没有账号请 注册新账号