408. Add BinaryLintCode java

Posted phdeblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了408. Add BinaryLintCode 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();
    }
}

 

 

以上是关于408. Add BinaryLintCode java的主要内容,如果未能解决你的问题,请参考以下文章

408 二进制求和

标志408 和308 区别

HTTP 408 和 504 错误有啥区别?

东风标志308和408的区别都有哪些呢?

使用 PHP 了解 Apache 上的“408 请求超时”

POST 请求出现随机 408 错误