一.解法
https://leetcode-cn.com/problems/add-binary/
要点:char的运算
Python采用暴力转int然后相加转二进制
C++和Java则用模拟计算进位,逢二进一的方法
字符串中拿到每一个数字后
处理两个字符串长度可能不一致,在短的前面添0
保存两个数字之和用string,需要翻转
二.Python实现
class Solution:
def addBinary(self, a: str, b: str) -> str:
return '{:b}'.format(int(a, 2) + int(b, 2))
三.C++实现
class Solution {
public:
string addBinary(string a, string b) {
int al = a.size();
int bl = b.size();
while(al < bl) //让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引
{
a = '0' + a; al++;
}
while(al > bl)
{
b = '0' + b; bl++;
}
for(int j = a.size() - 1; j > 0; -- j) //从后到前遍历所有的位数,同位相加
{
a[j] = a[j] - '0' + b[j];
if(a[j] >= '2') //若大于等于字符‘2’,需要进一
{
a[j] = (a[j] - '0') % 2 + '0';
a[j-1] = a[j-1] + 1;
}
}
a[0] = a[0] - '0' + b[0]; //将ab的第0位相加
if(a[0] >= '2') //若大于等于2,需要进一
{
a[0] = (a[0] - '0') % 2 + '0';
a = '1' + a;
}
return a;
}
};
四.java实现
class Solution {
public String addBinary(String a, String b) {
//计算个位的位置
int indexa = a.length() - 1;
int indexb = b.length() - 1;
//存储计算结果
StringBuilder res = new StringBuilder();
//存储进位
int carry = 0;
for( ;indexa>=0||indexb>=0; indexa--,indexb--){
//如果短字符串循环完了,就用0补位
char valuea = indexa<0?'0':a.charAt(indexa);
char valueb = indexb<0?'0':b.charAt(indexb);
int sum = (valuea-'0') + (valueb-'0') + carry;
res.append(sum % 2);
carry = sum / 2;
}
//两个字符串都遍历完成后,判断是仍否存在进位
if(carry>0){
res.append(carry);
}
return res.reverse().toString();
}
}