LeetCode简单题:67. 二进制求和(Python,C++,Java)

一.解法

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();
}

}

你可能感兴趣的:(LeetCode简单题:67. 二进制求和(Python,C++,Java))