408. Add Binary【LintCode java】

Description

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

Example

a = 11

b = 1

Return 100

解题:二进制相加。我的思路是,先转成StringBuilder对象(reverse方法比较好用),因为相加是从最后开始,所以先用reverse方法倒转过来。和上一题类似,用carry变量表示进位,0为不进位,1为需要进一位。最后的结果再倒过来。具体细节标注在代码中,代码如下:

public class Solution {
    /**
     * @param a: a number
     * @param b: a number
     * @return: the result
     */
    public String addBinary(String a, String b) {
        // write your code here
        StringBuilder sa = new StringBuilder(a);
        StringBuilder sb = new StringBuilder(b);
        StringBuilder res = new StringBuilder();
        int carry = 0;//表示进位
        sa.reverse();
        sb.reverse();
        int i = 0;
        for(i = 0; i < sa.length() && i < sb.length(); i++){
            int tpa = sa.charAt(i) - '0';
            int tpb = sb.charAt(i) - '0';
            if(carry == 0){   // 没有进位
                if(tpa == 1 && tpb == 1){
                    carry = 1;
                    res.append('0');
                }else{
                    char temp = (char)((int)'0' + (tpa+tpb));
                    res.append( temp );
                }
            }else{  //有进位;
                if(tpa + tpb == 1){
                    carry = 1; // 依然有进位
                    res.append('0');
                }else if( tpa + tpb == 2){
                    carry = 1;
                    res.append('1');
                }else{
                    // 0 + 0
                    carry = 0;
                    res.append('1');
                }
            }
        }
        //对剩下的处理
        while(i < sa.length()){
            //把sa后面的接上去,但是要考虑进位
            if(carry == 0){
                res.append(sa.substring(i));
                break;
            }else{
                //有进位
                if(sa.charAt(i) == '1'){
                    res.append('0');
                }else{
                    res.append('1');
                    carry = 0; 
                }
                i++;
            }
        }
        
        while(i < sb.length()){
            //把sa后面的接上去,但是要考虑进位
            if(carry == 0){
                res.append(sb.substring(i));
                break;
            }else{
                //有进位
                if(sb.charAt(i) == '1'){
                    res.append('0');
                }else{
                    res.append('1');
                    carry = 0; 
                }
                i++;
            }
        }
        if(carry == 1)
            res.append('1');
        return res.reverse().toString();
    }
}

猜你喜欢

转载自www.cnblogs.com/phdeblog/p/9316933.html
今日推荐