LeetCode - 67. 二进制求和

67. 二进制求和

import java.util.Objects;

class Solution {

    public String addBinary(String a, String b) {
        if (Objects.isNull(a)) {
            return b;
        }
        if (Objects.isNull(b)) {
            return a;
        }

        char[] s1 = a.toCharArray();
        char[] s2 = b.toCharArray();
        char[] result = new char[Math.max(s1.length, s2.length)];

        int i = s1.length - 1;
        int j = s2.length - 1;
        int size = result.length;

        int carry = 0;

        while (i >= 0 && j >= 0) {
            int sum = s1[i] - '0' + s2[j] - '0' + carry;
            carry = sum >> 1;
            sum = sum % 2;
            result[-- size] = (char) ('0' + sum);
            -- i;
            -- j;
        }

        while (i >= 0) {
            int sum = s1[i] - '0' + carry;
            carry = sum >> 1;
            sum = sum % 2;
            result[-- size] = (char) ('0' + sum);
            -- i;
        }

        while (j >= 0) {
            int sum = s2[j] - '0' + carry;
            carry = sum >> 1;
            sum = sum % 2;
            result[-- size] = (char) ('0' + sum);
            -- j;
        }

        if (carry == 1) {

            char[] newArray = new char[result.length + 1];
            newArray[0] = '1';
            System.arraycopy(result, 0, newArray, 1, result.length);
            return String.valueOf(newArray);
        }

        return String.valueOf(result);
    }
}


猜你喜欢

转载自blog.51cto.com/tianyiya/2172786