天天看點

練習題24-二進制求和

原題目:

給你兩個二進制字元串,傳回它們的和(用二進制表示)。

輸入為 非空 字元串且隻包含數字 1 和 0。

示例 1:

輸入: a = “11”, b = “1”

輸出: “100”

示例 2:

輸入: a = “1010”, b = “1011”

輸出: “10101”

思路:

根據兩個字元串長度從後往前周遊a,b數組,用x,y存儲每一次周遊到的字元,當其中一個字元長度減為0時,會自動變為0。

周遊到的字元進行相加然後與2取餘作為兩個數的和,将兩個數相加的值除以2作為進位值,并把這個值插入到字元串第一個位置。

當兩個字元串都周遊完成并且進位值為0時,退出循環,輸出str。

代碼:

class Solution {
  public:
    string addBinary(string a, string b) {
        string str;
        int jinwei = 0;
        for(int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0 || jinwei; --i, --j) {
            int x = i < 0 ? 0 : a[i] - '0';
            int y = j < 0 ? 0 : b[j] - '0';
            int sum = (x + y + jinwei) % 2;
            carry = (x + y + jinwei) / 2;
            str.insert(0, 1, sum + '0');
        }
        return str;
    }
};

[練習題23-求根](https://blog.csdn.net/weixin_44370808/article/details/106867882)