LintCode-二进制求和

来源:互联网 发布:杭州信雅达java怎么样 编辑:程序博客网 时间:2024/05/09 14:19
public static String addBinary(String a,String b) {        //先令两个字符串相等,短的那个在前面补0        String result = "";        int al = a.length();        int bl = b.length();        int max = Math.max(al, bl);        if(max == al) {            for(int i = 0 ; i < max - bl ; i++) {                b = "0" + b;            }        } else {            for(int i = 0 ; i < max - al ; i++) {                a = "0" + a;            }        }        char aa;        char bb;        //设置进位标志        boolean next = false;        for(int i = a.length() - 1 ; i >=0 ; i--) {            //倒序取出两个字符串的每个字符            aa = a.charAt(i);            bb = b.charAt(i);            //如果两位都是0:无论前一位是否有进位,都不会向下一位进位,因此next设为false,如果前一位有进位,那么这位结果为1,否则这位结果为0            if(aa == bb && aa == '0') {                if(next) {                    result = 1 + result;                    next = false;                } else {                    result = 0 + result;                }            //如果有一个为1令一个为0:如果前一位有进位:这位结果为0,并且向下一位进位;否则这一位结果为1,不会向下一位进位。            } else if(aa != bb) {                if(next) {                    result = 0 + result;                    next = true;                } else {                    result = 1 + result;                }            //最后如果两位都是1: 无论前一位是否有进位,这位都会向下一位进位,所以next设为true,当上一位有进位的时候,该位为1,否则为0            } else {                if(next) {                    result = 1 + result;                } else {                    result = 0 + result;                }                next = true;            }        }        //当循环完成的时候,也就是说每一位都相加完成,这时如果有进位,那么就讲result的下一位设为1,返回结果        if(next == true) {            result = 1 + result;        }        return result;    }
0 0
原创粉丝点击