Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

大意就是做二进制加法
不能简单的使用Integer.parseInt(s,2)来计算10进制相加在转换为2进制,因为给出的二进制字符串转换成10进制之后可能出现大小超过Integer可以表示的范围的情况。

public String addBinary(String a, String b) {
      if(a == null || a.isEmpty()){
            return b;
        }
        if(b == null | b.isEmpty()){
            return a;
        }
        char[] a_array = a.toCharArray();
        char[] b_array = b.toCharArray();
        /**
         * 两个字符数组,都从最后一位开始做位异或(相同即为0,不同即为1)可以计算出当前位置的字符
         * 是否进位通过当前两个数组的元素+上一轮计算的进位结果比较
         */
        int a_index = a_array.length - 1;
        int b_index = b_array.length - 1;
        StringBuilder sb = new StringBuilder("");
        /**
         * 表示是否进位
         */
        boolean carry = false;
        while(a_index >= 0 || b_index >= 0 || carry){
            int a_element = a_index >= 0 ? Character.getNumericValue(a_array[a_index--]) : 0;
            int b_element = b_index >= 0 ? Character.getNumericValue(b_array[b_index--]) : 0;
            sb.append(a_element ^ b_element ^ (carry ? 1 : 0));
            carry = a_element + b_element + (carry ? 1 : 0)> 1 ;
        }

        return sb.reverse().toString();

    }

你可能感兴趣的:(Add Binary)