leetcode 67. 二进制求和

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

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

 

题解:

1.两个二进制字符串

2.返回它们的和

3.两字符串非空,只包含0,1

 

示例 1:

输入: a = "11", b = "1"

输出: "100"

示例 2:

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

输出: "10101"

提示:

每个字符串仅由字符 '0' 或 '1' 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 "0" ,就都不含前导零。

 

解题思路:

  • 从后往前取,模拟十进制加法,这里满二进一

  • 用一个容器先存下,此时相反

  • 最后翻转整个字符串内容

C/C++题解:

class Solution {

public:

    string addBinary(string a, string b) {

        int i=a.size()-1,j=b.size()-1;

        int carry = 0;

        string ans = "";

        while(i>=0 || j>=0 || carry){

            int res = carry;

            if(i>=0){

                res += (a[i]-'0');//取尾元素加和

                i -= 1;}//向前走

            if(j>=0) {

                res += (b[j]-'0');//取尾元素加和

                j -= 1;}//向前走

            carry = res / 2;//满二进一,留下进位

            ans.push_back(res % 2 + '0');}//变成字符放进去

        reverse(ans.begin(),ans.end());//反转整个字符串

        return ans; }};

Debug结果:

leetcode 67. 二进制求和

Java题解:

class Solution {

    public String addBinary(String a, String b) {

        StringBuffer ans = new StringBuffer();

        int i=a.length()-1,j=b.length()-1;

        int carry = 0;

        while(i>=0 || j>=0 || carry==1){

            int res = carry;

            if(i>=0){

                res += (a.charAt(i)-'0');//取尾元素加和

                i -= 1; }//向前走

            if(j>=0){

                res += (b.charAt(j)-'0');//取尾元素加和

                j -= 1; }//向前走

 

            carry = res / 2;//满二进一,留下进位

            ans.append((char)(res % 2 + '0')); }//变成字符放进去

        ans.reverse();//反转整个字符串

        return ans.toString(); }}

Debug结果:

leetcode 67. 二进制求和

Python题解:

class Solution(object):

    def addBinary(self, a, b):

        """:type a: str:type b: str:rtype: str"""

        i, j, carry, ans = len(a)-1, len(b)-1, 0, ""

        while i>=0 or j>=0 or carry==1:

            res = carry

            if i >= 0:

                res += int(a[i]) #取尾元素加和

                i -= 1 #向前走

            if j >= 0:

                res += int(b[j]) #取尾元素加和

                j -= 1 #向前走

            carry = res // 2 #满二进一,留下进位

            ans += str(res % 2) #变成字符放进去

        return ans[::-1] #反转整个字符串

Debug结果:

leetcode 67. 二进制求和

更多题解移步公众号免费获取

leetcode 67. 二进制求和