目錄
題目描述:
整體思路:
具體代碼:
?
題目描述:
原題地址
給你兩個二進制字符串?
a
?和?b
?,以二進制字符串的形式返回它們的和。示例?1:
輸入:a = "11", b = "1" 輸出:"100"示例?2:
輸入:a = "1010", b = "1011" 輸出:"10101"提示:
1 <= a.length, b.length <= 104
a
?和?b
?僅由字符?'0'
?或?'1'
?組成- 字符串如果不是?
"0"
?,就不含前導零
整體思路:
按照模2加法的執行過程,從低位加到高位,用int型去執行加法運算,再用to_string()函數轉換成string添加到ans。主要注意a和b長度不一致的情況和涉及進位的計算。最后別忘了檢查進位是否為1,若為1則代表最高位數據位有進位。
具體代碼:
class Solution {
public:string addBinary(string a, string b) {if(a.size()<b.size()) return addBinary(b,a);//make sure a.size>b.sizeint count=0,sum=0;string ans;for(int i=a.size()-1,j=b.size()-1;i>=0;i--){if(j>=0){sum=((a[i]-'0')+(b[j]-'0')+count)%2;count=((a[i]-'0')+(b[j]-'0')+count)/2;j--;}else{//when shorter string was finished.Only need to calculate longer one.sum=(a[i]-'0'+count)%2;count=(a[i]-'0'+count)/2;}ans+=to_string(sum);}if(count!=0) ans+=to_string(count);//don't forget to check if count is 1reverse(ans.begin(),ans.end());return ans;}
};