【Leetcode】67. 二进制求和

作者: 码蹄疾 | 来源:发表于2018-09-13 22:23 被阅读0次

    题目

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

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

    示例 1:

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

    输入: a = "1010", b = "1011"
    输出: "10101"

    题解

    这道题也是模拟一下前面的,从后向前逐个相加求解就好,和上一题类似。

    java

    class Solution {
        public String addBinary(String a, String b) {
            StringBuilder sb = new StringBuilder();
            int i = a.length() - 1, j = b.length() - 1, carry = 0;
            while (i >= 0 || j >= 0) {
                int sum = carry;
                if (j >= 0) sum += b.charAt(j--) - '0';
                if (i >= 0) sum += a.charAt(i--) - '0';
                sb.append(sum % 2);
                carry = sum / 2;
            }
            if (carry != 0) sb.append(carry);
            return sb.reverse().toString();
        }
    }
    

    python

    python由于库函数非常强大,所以,代码写起来很简单,不用这么逐个相加.一行代码搞定。

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

    但是建议面试的时候你还是老老实实的按照上面那种逐个相加的去做,原因是不要让面试官显得他很智障。

    bin

    这个函数就是转化为2进制

    def bin(*args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
        """
        Return the binary representation of an integer.
        
           >>> bin(2796202)
           '0b1010101010101010101010'
        """
        pass
    

    eg:

    >>>bin(10)
    '0b1010'
    >>> bin(20)
    '0b10100'
    

    所以需要[2:]

    热门阅读

    Leetcode名企之路

    相关文章

      网友评论

        本文标题:【Leetcode】67. 二进制求和

        本文链接:https://www.haomeiwen.com/subject/ejaggftx.html