【题目】
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
class Solution {
public:
string addBinary(string a, string b) {
if(a.length()<b.length()){
string temp=a;
a=b;
b=temp;
}
vector<char> vec;
vec.clear();
int m=a.length(),n=b.length(),flag=0;
for(int i=n-1;i>=0;--i){
int sum=(a[i+m-n]-'0')+(b[i]-'0')+flag;
if(sum<2){
flag=0;
vec.push_back((char)(sum+'0'));
}
else{
flag=1;
vec.push_back((char)((sum-2)+'0'));
}
}
if(m>n){
for(int i=m-n-1;i>=0;--i){
int sum=a[i]-'0'+flag;
if(sum<2){
flag=0;
vec.push_back((char)(sum+'0'));
}
else{
flag=1;
vec.push_back((char)((sum-2)+'0'));
}
}
}
if(1==flag) vec.push_back('1');
string ret="";
for(int i=vec.size()-1;i>=0;--i) ret+=vec[i];
return ret;
}
};
【总结】
注意两个问题:
1.字符和数字之间的转换:
字符转换为数字:char ch='a'; int num=ch-'0';
数字转换为字符:int num=1; char ch=(char)(num+'0');
2.进位,最后一个进位要考虑的。