二进制求和

124 阅读1分钟

二进制求和

说明

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10

示例 1:

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

示例 2:

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

    • 每个字符串仅由字符 '0' 或 '1' 组成。
    • 1 <= a.length, b.length <= 10^4
    • 字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ad…

题解

解法一

   public static void main(String[] args) {
        String a = "101111";
        String b = "10";
        System.out.println(demo(a,b));
    }
​
    public static String demo(String a,String b){
        int length = 0;
        StringBuilder s = new StringBuilder();
        if(a.length() > b.length()){
            length = b.length();
            s = new StringBuilder(a.substring(0, a.length() - b.length()));
        }else{
            length = a.length();
            s = new StringBuilder(b.substring(0, b.length() - a.length()));
        }
        int number = 0;
        StringBuilder sum = new StringBuilder();
        for (int i = 0; i < length; i++) {
            char numberA = a.charAt(a.length() - i - 1);
            char numberB = b.charAt(b.length() - i - 1);
            if('1' == numberA && '1' == numberB){
                if(number == 1){
                    sum.insert(0, "1");
                }else{
                    sum.insert(0, "0");
                }
                number = 1;
            }else if('0' == numberA && '0' == numberB){
                if(number == 1){
                    sum.insert(0, "1");
                }else{
                    sum.insert(0, "0");
                }
                number = 0;
            }else{
                if(number == 1){
                    sum.insert(0, "0");
                    number = 1;
                }else{
                    sum.insert(0, "1");
                    number = 0;
                }
            }
        }
        if(s.length() == 0 && number == 1){
            sum.insert(0, "1");
            return sum.toString();
        }
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(s.length() - 1 - i);
            if(number == 1 &&  c == '1'){
                sum.insert(0, "0");
                number = 1;
            }else if(number == 1 &&  c == '0'){
                sum.insert(0, "1");
                number = 0;
            }else{
                sum.insert(0, c);
                number = 0;
            }
        }
        if(number == 1){
            sum.insert(0, "1");
        }
        return sum.toString();
    }

解法二

力扣大佬写的,思路很清晰

   public String addBinary(String a, String b) {
        int aLast = a.length() - 1, bLast = b.length() - 1;
        StringBuilder res = new StringBuilder();
        int carry = 0;
        while (aLast >= 0 || bLast >= 0) {
            int aVal = 0, bVal = 0;
            if (aLast >= 0) aVal = a.charAt(aLast--) - '0';
            if (bLast >= 0) bVal = b.charAt(bLast--) - '0';
            res.append((aVal + bVal + carry) % 2);
            if ((aVal + bVal + carry) > 1) carry = 1;
            else carry = 0;
        }
        if (carry == 1) res.append(carry);
        return res.reverse().toString();
    }

\