题目链接
https://leetcode-cn.com/problems/add-binary/submissions/
注意点
最高位相加后可能产生进位,也要计算在内。
解法
解法1:逐位相加
按照一般的加法运算方式考虑,从最高位开始,将两个字符串的值相加。
这里涉及到两个主要的问题:
1.两个字符串位数不同怎么办?
2.数字和字符的转换问题。
对于第一个问题,可以用一个问号表达式解决
int aa=i>=0 ? a[i--]-'0':0;//不用根据位数讨论的方法
int bb=j>=0 ? b[j--]-'0':0;
这个问号表达式的含义就是,如果当前遍历的序号为负值,说明已经完成了最高位的计算,将该位赋值0,参与计算。
对于第二个问题,一开始考虑的时候有点脑筋转不过来的嫌疑,总想着从一而终,因为最后需要的是字符串的形式,那就干脆不转数字,用字符串相加减,判断进位,但实际上,做运算的时候还是把字符转换为数字比较容易判断进位,加入结果的时候再变为字符形式。
执行用时 :
4 ms
, 在所有 C++ 提交中击败了
83.50%
的用户
内存消耗 :
6.7 MB
, 在所有 C++ 提交中击败了
100.00%
的用户
class Solution {
public:
string addBinary(string a, string b) {
int jinwei=0;
string res="";
int i=a.size()-1,j=b.size()-1;
while(i>=0 || j>=0){
int aa=i>=0 ? a[i--]-'0':0;//不用根据位数讨论的方法
int bb=j>=0 ? b[j--]-'0':0;
res+=(aa+bb+jinwei)%2+'0';
jinwei=(aa+bb+jinwei)/2;
}
if(jinwei!=0) res+="1";//最后可能还有进位
reverse(res.begin(),res.end());
return res;
}
};
遇到问题
1.两个字符串位数不同怎么办?
2.数字和字符的转换问题。
小结
掌握不用分类讨论的位数相加;字符和数字相互转换的快捷模式。