【LintCode-408】二进制求和(Java实现)

来源:互联网 发布:逗鱼时刻知乎 编辑:程序博客网 时间:2024/06/06 19:43

这里写图片描述
第一次代码记录(不带注释版本):

    public String addBinary(String a, String b) {        int alength=a.length();        int blength=b.length();        String result="";        int sum =0;        while(alength>=1||blength>=1){            if(alength>=1){                sum+=Integer.parseInt(a.substring(alength-1,alength));                alength--;            }            if(blength>=1){                sum+=Integer.parseInt(b.substring(blength-1,blength));                blength--;            }            if(sum==2){                result="0"+result;                sum=1;            }else if(sum==3){                result="1"+result;                sum=1;            }else{                result=sum+""+result;                sum=0;            }        }        if(sum==1){            result="1"+result;        }        return result;    }

第二次代码记录(带完整注释版本):

    public String addBinary(String a, String b) {        String result="";        //类似于前一章的carry进位状态符        int sum=0;        int lengthA=a.length();        int lengthB=b.length();        while(lengthA>0||lengthB>0){            if(lengthA>0){                //截取字符串最后一位,类似获取十进制里的个位                sum+=Integer.parseInt(a.substring(lengthA-1,lengthA));                lengthA--;            }            if(lengthB>0){                sum+=Integer.parseInt(b.substring(lengthB-1,lengthB));                lengthB--;            }            //当刚好满足二进制进位条件时            if(sum==2){                //相加刚好等于2,所以前一位剩余0,类似于十进制 4+6时,个位满十进位,个位数值为0                result="0"+result;                //这里重新赋予1,是指进位的那一个数值,所以前面代码是用 sum+=  而不是sum=                sum=1;            }else if(sum==3){                result="1"+result;                sum=1;            }else{                result=(sum+"")+result;                sum=0;            }            }        //用于处理最高位进位        if(sum==1){            result="1"+result;        }        return result;    }

个人解题思路:
模拟一遍二进制求和的过程(详细请看第二次代码注释),需要注意 进位条件(sum=2、3)与 当a,b位数相同而且存在最高位需要进位时(例如“1”,“1”时)

如果您有更好的解法,欢迎您在留言区补充,感谢!!

原创粉丝点击