Add Binary

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

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

z这是一道简单题。

就是通过字符串的二进制相加返回字符串的二进制相加的结果。

我是单纯用网页写的,虽然简单,但是犯错了,Java基础太久没用忘了。

1.String中取某一个具体位置的字符是用a.charAt(intdex),不是a[index]也不是a.charat(index);

2.字符串的长度是a.length(),而不是a.length;

3.我使用0开始的下标遍历字符串,而提取字符串要从右往左,所以下标的位置是a.charAt(a.length()-index-1)而不是a.charAt(a.length()-index)

4.算法是先算出两者的公共部分,然后算出某一个字符串的单独部分,就是较长那个字符串多出来的部分。

这样子并不是结束了,在最后还要判断一下进位是否有,如果有的话,还有给结果字符串前面加‘1’;

这才算结束。


上代码

public class Solution {
    public String addBinary(String a, String b) {
       // return Integer.toBinaryString(Integer.parseInt(a,2)+Integer.parseInt(b,2));
        String result="";
        int strlen=0;
        int isbig=0;
        int alength=a.length(),blength=b.length();
        for(;strlen<alength&&strlen<blength;++strlen){
            if(isbig==1){
                if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='1')
                    {
                        result='1'+result;
                        isbig=1;
                    }
                if(a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='0')
                    {
                        result='1'+result;
                        isbig=0;
                    }
                if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='0'||a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='1')
                    {
                        result='0'+result;
                        isbig=1;
                    }
            }
            else{
                 if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='1')
                    {
                        result='0'+result;
                        isbig=1;
                    }
                if(a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='0')
                    {
                        result='0'+result;
                        isbig=0;
                    }
                if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='0'||a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='1')
                    {
                        result='1'+result;
                        isbig=0;
                    }
            }
        }
        if(strlen==alength){
            for(;strlen<blength;++strlen){
                if(isbig==1){
                    if(b.charAt(blength-strlen-1)=='1'){
                        result='0'+result;
                        isbig=1;
                    }
                    else{
                         result='1'+result;
                        isbig=0;
                    }
                }else{
                   if(b.charAt(blength-strlen-1)=='1'){
                        result='1'+result;
                        isbig=0;
                    }
                    else{
                        result='0'+result;
                        isbig=0;
                    } 
                }
            }
        }
        else{
            for(;strlen<alength;++strlen){
                if(isbig==1){
                    if(a.charAt(alength-strlen-1)=='1'){
                        result='0'+result;
                        isbig=1;
                    }
                    else{
                         result='1'+result;
                        isbig=0;
                    }
                }else{
                   if(a.charAt(alength-strlen-1)=='1'){
                        result='1'+result;
                        isbig=0;
                    }
                    else{
                        result='0'+result;
                        isbig=0;
                    } 
                }
            }
            
        }
      if(isbig==1)result='1'+result;
      return result;  
        
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值