LeetCode-67. 二进制求和

题目描述 二进制求和

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

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

示例 1:

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

示例 2:

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

解题思路

思路是那个思路,写的也太麻烦了,哎,啥时候才能学会啊!没关系,已经学会一半了,至少知道先把短的字符串用0补齐了,但是下次能不用那么多if-else吗,请讲究技巧。

代码

class Solution {
public:
    string addBinary(string a, string b) {
        string res="";
        bool temp=false;
        int i=a.size()-1;
        int j=b.size()-1;

        while(i>=0||j>=0){
            int t;
            if(i>=0 && j>=0) t = a[i] - '0' + b[j] - '0';
            else if(i>=0) t = a[i] - '0';
            else if(j>=0) t = b[j] - '0';
            cout << "t:" << t << endl;
            if(temp && t==2){
                res = '1' + res;
            }else if(temp && t==1){
                res = '0' + res;
            }else if(temp && t==0){
                temp = false;
                res = '1' + res;
            }else if(!temp && t==2){
                temp = true;
                res = '0' + res;
            }else if(!temp && t==1){
                res = '1' + res;
            }else if(!temp && t==0){
                res = '0' + res;
            }
            i--;
            j--;
        }

        if(temp) res = '1' + res;
        return res;
    }
};

祭出大佬代码

class Solution {
public:
    string addBinary(string a, string b) {
        string res = "";
        int c = 0;
        int i = a.size() - 1;
        int j = b.size() - 1;
        while(i >= 0 || j>=0 || c==1){
            c += (i>=0 ? a[i--] - '0':0);
            c += (j>=0 ? b[j--] - '0':0);
            res = char(c%2 + '0') + res;
            c /= 2;
        }
        return res;
    }
};

你可能感兴趣的:(LeetCode-67. 二进制求和)