一.解法
https://leetcode-cn.com/problems/add-binary/
要點:char的運算
Python采用暴力轉(zhuǎn)int然后相加轉(zhuǎn)二進(jìn)制
C++和Java則用模擬計算進(jìn)位郭卫,逢二進(jìn)一的方法
字符串中拿到每一個數(shù)字后
處理兩個字符串長度可能不一致砍聊,在短的前面添0
保存兩個數(shù)字之和用string,需要翻轉(zhuǎn)
二.Python實現(xiàn)
class Solution:
def addBinary(self, a: str, b: str) -> str:
return '{:b}'.format(int(a, 2) + int(b, 2))
三.C++實現(xiàn)
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) //從后到前遍歷所有的位數(shù)词疼,同位相加
{
a[j] = a[j] - '0' + b[j];
if(a[j] >= '2') //若大于等于字符‘2’俯树,需要進(jìn)一
{
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,需要進(jìn)一
{
a[0] = (a[0] - '0') % 2 + '0';
a = '1' + a;
}
return a;
}
};
四.java實現(xiàn)
class Solution {
public String addBinary(String a, String b) {
//計算個位的位置
int indexa = a.length() - 1;
int indexb = b.length() - 1;
//存儲計算結(jié)果
StringBuilder res = new StringBuilder();
//存儲進(jìn)位
int carry = 0;
for( ;indexa>=0||indexb>=0; indexa--,indexb--){
//如果短字符串循環(huán)完了,就用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;
}
//兩個字符串都遍歷完成后,判斷是仍否存在進(jìn)位
if(carry>0){
res.append(carry);
}
return res.reverse().toString();
}
}