力扣每日一题67:二进制求和

题目描述:

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

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

示例 2:

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

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

通过次数

352.1K

提交次数

665.8K

通过率

52.9%

思路和题解:

两个字符串向右对齐,模拟相加,最后剩余部分和剩下的进位模拟相加。

代码:

class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        int m=a.size()-1;
        int n=b.size()-1;
        int CF=0;
        //向右对齐,对齐部分相加
        while(n>=0&&m>=0)
        {
            int x=CF+a[m]-'0'+b[n]-'0';
            CF=x/2;
            x=x%2;
            ans.insert(ans.begin(),x+'0');
            n--;
            m--;
        }
        //剩余部分与进位相加
        if(m>=0)
        {
            while(m>=0)
            {
                int x=CF+a[m]-'0';
                CF=x/2;
                x=x%2;
                ans.insert(ans.begin(),x+'0');
                m--;
            }
        }
        else if(n>=0)
        {
            while(n>=0)
            {
                int x=CF+b[n]-'0';
                CF=x/2;
                x=x%2;
                ans.insert(ans.begin(),x+'0');
                n--;
            }
        }
        //不全多余的进位
        if(CF==1) ans.insert(ans.begin(),'1');
        return ans;
    }
};

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)