leetcode 58: Add Binary

Add BinaryApr 2 '12

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

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

public class Solution {
    public String addBinary(String a, String b) {
        // Start typing your Java solution below
        // DO NOT write main() function
        char[] aa = a.toCharArray();
        char[] bb = b.toCharArray();
        StringBuilder sb = new StringBuilder();
        int i=aa.length - 1;
        int j=bb.length - 1;
        int carry = 0;
        int temp = 0;
        
        while(i>=0 && j>=0 ) {
            temp = aa[i] + bb[j] - '0' - '0' + carry;
            if( temp / 2 > 0) carry = 1; 
            else carry = 0;
            sb.insert(0, temp%2);
            --i;
            --j;
        }
        
        while(i>=0) {
            temp = aa[i] - '0' + carry;
            carry = temp/2>0 ? 1 : 0;
            sb.insert(0, temp%2 );
            --i;
        }
        
        
        while(j>=0) {
            temp = bb[j] - '0' + carry;
            carry = temp/2>0 ? 1 : 0;
            sb.insert(0, temp%2);
            --j;
        }
        
        if( carry>0) {
            sb.insert(0,1);
        }
        
        return sb.toString();
    }
}


 2nd try:

public class Solution {
    public String addBinary(String a, String b) {
        // Start typing your Java solution below
        // DO NOT write main() function
        
        // inital check.
        if(a==null || b==null) return null;
        if(a.length()==0) return b;
        if(b.length()==0) return a;
        
        int asz = a.length();
        int bsz = b.length();
        
        StringBuilder sb = new StringBuilder();
        int carry = 0;
        
        int i=0;
        for(; i<asz && i<bsz; i++) {
            char aa = a.charAt(asz-i-1);
            char bb = b.charAt(bsz-i-1);
            
            int x= aa-'0' + bb-'0' + carry;
            carry = x>>1;
            sb.insert(0,x&1+'0');
        }
        
        String c = asz>bsz ? a : b;
        
        while(i<c.length()) {
            char cc = c.charAt(c.length()-i-1);
            int x = cc-'0' + carry;
            carry = x>>1;
            sb.insert(0,x&1+'0');
            ++i; //check index increase or decrease in every while loop. always forget.
        }
        
        if(carry==1) sb.insert(0,'1');
        
        return sb.toString();
    }
}


posted @ 2013-01-28 20:40  西施豆腐渣  阅读(131)  评论(0编辑  收藏  举报