Add Binary

来源:互联网 发布:汉字书写顺序软件 编辑:程序博客网 时间:2024/06/05 20:31

1.题目

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

a = 11

b = 1

返回 100

2.算法

算法思想是从低位开始,一直相加并且维护进位。这个题目低位在后面,所以要从string的尾部往前加。时间复杂度是O(max(m,n)),m和n分别是两个字符串的长度,空间复杂度是结果的长度O(max(m,n))。

    public String addBinary(String a, String b) {        // Write your code here        if (a == null || a.length() == 0) {            return b;        }        if (b == null || b.length() == 0) {            return a;        }        int i = a.length() - 1;        int j = b.length() - 1;        int carry = 0;        StringBuffer res = new StringBuffer();        while (i >= 0 && j >= 0) {            int digit = (int)(a.charAt(i) - '0' + b.charAt(j) - '0') + carry;            carry = digit / 2;            digit = digit % 2;            res.append(digit);            i--;            j--;        }        while (i >=  0) {            int digit = (int)(a.charAt(i) - '0') + carry;            carry = digit / 2;            digit = digit % 2;            res.append(digit);            i--;        }         while (j >=  0) {            int digit = (int)(b.charAt(j) - '0') + carry;            carry = digit / 2;            digit = digit % 2;            res.append(digit);            j--;        }        if (carry > 0) {            res.append(carry);        }        return res.reverse().toString();    }


    def addBinary(self, a, b):        # Write your code here        i = len(a) - 1        j = len(b) - 1        carry = 0        sum = ''        while i >= 0 or j >= 0:            x = int(a[i]) if i >= 0 else 0            y = int(b[j]) if j >= 0 else 0            if (x + y  + carry) % 2 == 0:                sum = '0' + sum            else :                 sum = '1' + sum            carry = (x + y  + carry) / 2             i, j = i - 1, j - 1        if carry > 0:            sum = '1' + sum        return sum


0 0
原创粉丝点击