LeetCode 67. Add Binary

123 阅读1分钟

LeetCode 67. Add Binary

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

 

示例 1:

输入:a = "11", b = "1" 输出:"100" 示例 2:

输入:a = "1010", b = "1011" 输出:"10101"  

提示:

1 <= a.length, b.length <= 104 a 和 b 仅由字符 '0' 或 '1' 组成 字符串如果不是 "0" ,就不含前导零

算法分析

类似高精度加法的原理

1、对a字符串和b字符串进行反转
2、枚举所有位,将t = t + a[i] + b[i]对t % 2 (2取模)的值放在当前位,将t / 2 (剩下的)放在下一位
3、若枚举完所有位后,t > 0,将t再次存入到下一位
4、将ans字符串进行反转返回

时间复杂度 O(max(n,m))

n表示a的长度,m表示b的长度

Java 代码

class Solution {
    public String addBinary(String a, String b) {

        StringBuffer sba = new StringBuffer(a);
        StringBuffer sbb = new StringBuffer(b);
        sba = sba.reverse();
        sbb = sbb.reverse();

        StringBuffer ans = new StringBuffer("");
        int t = 0;
        for(int i = 0;i < sba.length() || i < sbb.length();i ++)
        {
            if(i < sba.length()) t += sba.charAt(i) - '0';
            if(i < sbb.length()) t += sbb.charAt(i) - '0';
            ans.append(t % 2);
            t /= 2;
        }
        if(t != 0) ans.append(t);

        return ans.reverse().toString();
    }
}