【leetcode陣列和字串】二進位制求和
阿新 • • 發佈:2018-12-08
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 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.之前(加一)學了十進位制的進位,而這道題是二進位制的進位演算法