码迷,mamicode.com
首页 > 编程语言 > 详细

408. Add Binary【LintCode java】

时间:2018-07-16 12:22:54      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:i++   str   break   substring   render   bst   reverse   rip   ring   

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();
    }
}

 

 

408. Add Binary【LintCode java】

标签:i++   str   break   substring   render   bst   reverse   rip   ring   

原文地址:https://www.cnblogs.com/phdeblog/p/9316933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!