67. Add Binary

先翻转再算,最后再翻转。

其实没必要,翻转了是从0开始比较方便。。

直接做也完全可以……

然后其实也不用判定谁长谁短,LOOP里面加判定,超过的直接+0就可以了。。

Time: O(n)
Space: O(1)

public class Solution {
    public String addBinary(String a, String b) {
        if (a.length() == 0 || b.length() == 0) return a.length() == 0 ? b : a;
        if (a.length() > b.length()) {
            String temp = a;
            a = b;
            b = temp;
        }
        StringBuilder s1 = new StringBuilder(a);
        a = s1.reverse().toString();
        StringBuilder s2 = new StringBuilder(b);
        b = s2.reverse().toString();
        int c = 0;
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < a.length(); i++) {
            int total = c + a.charAt(i) + b.charAt(i) - '0' - '0';
            if (total >= 2) {
                c = 1;
                total %= 2;
            } else {
                c = 0;
            }
            res.append(total); 
        }
        
        for (int i = a.length(); i < b.length(); i++) {
            int total = c + b.charAt(i) - '0';
            if (total >= 2) {
                c = 1;
                total %= 2;
            } else {
                c = 0;
            }
            res.append(total); 
        }
        if (c == 1) res.append(1);
        return res.reverse().toString();
        
        
        
    }
}



三刷。
自己以前写的也太丑陋了。

public class Solution {
    public String addBinary(String a, String b) {
        if (a.length() == 0 || b.length() == 0) return a.length() == 0? b:a;
        StringBuilder res = new StringBuilder();
        int carry = 0;
        int l1 = a.length() - 1;
        int l2 = b.length() - 1;
        while (l1 >= 0 || l2 >= 0 || carry > 0) {
            int first = (l1 < 0)? 0:a.charAt(l1--) - '0';
            int second = (l2 < 0)? 0:b.charAt(l2--) - '0';
            res.append((first + second + carry) % 2);
            carry = (first + second + carry) / 2;
        }
        
        return res.reverse().toString();
    }
}
posted @ 2016-11-06 13:16  哇呀呀..生气啦~  阅读(83)  评论(0)    收藏  举报