LeetCode 67. Add Binary

简介: 给定两个二进制字符串,返回它们的总和(也是二进制字符串)。输入字符串都是非空的,只包含字符1或0。

v2-db7e6a70ddefdf983333b6340a7b6105_1440w.jpg

Description



Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.


Example 1:

Input: a = "11", b = "1"

Output: "100"


Example 2:

Input: a = "1010", b = "1011"

Output: "10101"


描述



给定两个二进制字符串,返回它们的总和(也是二进制字符串)。

输入字符串都是非空的,只包含字符1或0。


思路



  • 这道题要求两个二进制数相加
  • 我们按照二进制相加的规则:满二进一即可。思路很清晰,注意a数组和b数组长度可能不同,对于较长数组的剩余部分需要额外处理.


class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        # 获取字符串a和字符串b的长度
        len_a, len_b = len(a), len(b)
        # 结果数组
        res = []
        # 字典,用于记录哪一个字符更长
        longest = {}
        # 如果字符串a更长
        if len_a < len_b:
            num_min = len_a
            longest.setdefault('a', b)
            left = len_b-len_a
        # 如果字符串b更长
        else:
            num_min = len_b
            longest.setdefault('a', a)
            left = len_a-len_b
        temp = 0
        # 进行加和运算,注意二进制的进位,遍历a数组和b数组相互重叠的部分
        for index in range(1, num_min+1):
            # 从右往左开始做加法运算
            temp = temp+int(a[-index])+int(b[-index])
            # 如果大于2则表示需要进位
            if temp >= 2:
                # 进位,当前位置值设置为temp-2
                res.insert(0, temp-2)
                # 重置temp = 1
                temp = 1
            else:
                # 在结果数组的首位插入,然后将temp重置为0
                res.insert(0, temp)
                temp = 0
        # 对剩下的部分进行加和
        for index in range(left-1, -1, -1):
            temp = temp+int(longest.get('a')[index])
            if temp >= 2:
                res.insert(0, temp-2)
                temp = 1
            else:
                res.insert(0, temp)
                temp = 0
        if temp:
            res.insert(0, temp)
        # 以字符的形式返回
        return ''.join(str(x) for x in res)


源代码文件在这里.


目录
相关文章
Leetcode Minimum Depth of Binary Tree (面试题推荐)
计算树的最小深度 很简单的一道题,只需要遍历一次树,到叶子节点的时候计算一下深度和当前最小深度比较,保存最小值就行。 我在这用了一个全局变量 mindepth。总感觉我这代码写的不够简练,求更精简的方法。
47 0
Leetcode Binary Tree Postorder Traversal(面试题推荐)
非递后续归遍历二叉树,肯定得用到栈。先序遍历很好写,但后续遍历就不是那么容易了。 只需要设置个指针pre,指向最后输出的那个节点就行了,只要判断cur指针指向的是上次输出节点的父节点,且cur无其他未遍历的节点,这个时候就把cur节点输出即可,然后更改pre。原理是要遍历当前节点,其所有子节点都必须遍历完,因为肯定是先左后右,所以只需一个指针保持前一次输出的结果即可。
51 0
Leetcode 236. Lowest Common Ancestor of a Binary Tree
根据LCA的定义,二叉树中最小公共祖先就是两个节点p和q最近的共同祖先节点,LCA的定义没什么好解释的,主要是这道题的解法。
38 0
Leetcode 623. Add One Row to Tree
题目很简单,在树的第d层加一层,值为v。递归增加一层就好了。代码如下
47 0
|
存储 C++ Python
LeetCode刷题---Add Two Numbers(一)
LeetCode刷题---Add Two Numbers(一)
|
存储 算法 安全
LeetCode - #2 Add Two Numbers
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #2 Add Two Numbers
LeetCode contest 190 5418. 二叉树中的伪回文路径 Pseudo-Palindromic Paths in a Binary Tree
LeetCode contest 190 5418. 二叉树中的伪回文路径 Pseudo-Palindromic Paths in a Binary Tree
LeetCode Contest 178-1367. 二叉树中的列表 Linked List in Binary Tree
LeetCode Contest 178-1367. 二叉树中的列表 Linked List in Binary Tree
LeetCode 415. Add Strings
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
95 0
LeetCode 415. Add Strings
|
Python
LeetCode 401. Binary Watch
二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。
107 0
LeetCode 401. Binary Watch