1. 程式人生 > >【leetcode陣列和字串】二進位制求和

【leetcode陣列和字串】二進位制求和

給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1 和 0。

示例 1:

輸入: a = “11”, b = “1”
輸出: “100”
示例 2:

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

C++解法

class Solution {
public:
    string addBinary(string a, string b) {
         string res = "";
        int m = a.size() - 1, n = b.size() - 1, carry = 0;
        while
(m >= 0 || n >= 0) { int p = m >= 0 ? a[m--] - '0' : 0; //先執行a[],再m-1 int q = n >= 0 ? b[n--] - '0' : 0; int sum = p + q + carry; res = to_string(sum % 2) + res; carry = sum / 2; } return carry == 1 ? "1" + res : res; }
};

總結:
1.瞭解了a[m–]的執行順序
2.string變數a直接使用a[]會自動轉換成char a[]
3.char[]與’0’相加減時,實際上是ASCII碼的運算
4.之前(加一)學了十進位制的進位,而這道題是二進位制的進位演算法