您的位置:首页 > 其它

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

2020-03-15 18:21 274 查看

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

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


  【题目】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/

  • 点赞 2
  • 收藏
  • 分享
  • 文章举报
Mingw_ 发布了36 篇原创文章 · 获赞 64 · 访问量 2777 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: