这个题还是比较简单的,就是需要代码的简洁,用两个index分别指向两个字符串,用一个carry保存进位,由于index需要判断出界,开始准备用好几种情况分别讨论,后来发现只判断两个index是否同时越界,如果有一个没越另一个越了,就让另一个为'0'就行。同时注意char和int的转化,由于string中的char只可能是'0'或'1',用char减去'0'就得到最后转化后的int值。
另外对string的操作也要看看,我用的是insert(pos,n,char)。
代码(24ms):
class Solution {
public:
string addBinary(string a, string b) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int carry=0;
string result;
for(int indexA = a.size()-1, indexB=b.size()-1 ;indexA>=0||indexB>=0;indexA--,indexB--){
char currentA = indexA>=0?a[indexA]:'0';
char currentB = indexB>=0?b[indexB]:'0';
result.insert(0,1, ( currentA -'0' + currentB-'0' + carry)%2+'0');
carry = ( currentA -'0' + currentB -'0' + carry)/2;
}
if(carry==1){
result.insert(0,1,'1');
}
return result;
}
};