以字串的形式去做加法
class Solution {
public:
string addBinary(string a, string b) {
int carry = 0; // 進位
string ans;
int i = a.size() - 1, j = b.size() - 1;
while(i>-1 || j>-1 || carry!=0){
int sum = 0; // 每一位一位的加總
if(i>=0){
sum+= a[i]-'0';
i--;
}
if(j>=0){
sum+= b[j]-'0';
j--;
}
sum+=carry;
ans+= (sum%2)+'0';
carry = sum/=2;
}
// 反轉
reverse(ans.begin(), ans.end());
return ans;
}
};
解法 01 會發現,他是要從右邊往左(for 迴圈–)
然後最後答案又要再反轉
那還不如,一開始講字串 a b 反轉,後面的都不用做了
class Solution {
public:
string addBinary(string a, string b) {
int carry = 0;
string ans;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int n = max(a.size(), b.size());
for (int i = 0; i < n || carry; i++) {
int sum = carry;
if (i < a.size()) sum += a[i] - '0';
if (i < b.size()) sum += b[i] - '0';
ans += (sum % 2) + '0';
carry = sum / 2;
}
reverse(ans.begin(), ans.end());
return ans;
}
};