LintCode | 408. 二进制求和

来源:互联网 发布:金元证券交易软件下载 编辑:程序博客网 时间:2024/05/21 10:34

给定两个二进制字符串,返回他们的和(用二进制表示)。

比较蠢的办法

public class Solution {    public String addBinary(String a, String b) {        //分别用 max min 指向长度最长 最短字符串        String max, min;        if(a.length() > b.length()) {            max = a;            min = b;        } else {            max = b;            min = a;        }        //逐位计算,用 StringBuilder 来保存        StringBuilder sum = new StringBuilder("");        //进位标志        int carry = 0;        //先进行短字符串长度部分的位运算        for(int i = 1; i < min.length() + 1; i++) {            //每次循环取出两个字符串的同一位            char ai = a.charAt(a.length() - i);            char bi = b.charAt(b.length() - i);            //分别判断各位情况,注意进位            if(ai == '0' && bi == '0') {                sum.insert(0, carry);                carry = 0;            } else if(ai != bi) {                if(carry == 0) sum.insert(0, 1);                else sum.insert(0, 0);            } else if(ai == '1' && bi == '1') {                if(carry == 0) sum.insert(0, 0);                else sum.insert(0, 1);                carry = 1;            }        }        //短字符串长度部分比较完后,再单独计算长字符串多出来的部分        for(int i = max.length() - min.length() - 1; i >= 0; i--) {            if(carry == 1) {                if(max.charAt(i) == '1') {                    sum.insert(0, 0);                    carry = 1;                } else {                    sum.insert(0, 1);                    carry = 0;                }            } else {                sum.insert(0, max.substring(0, i+1));                break;            }        }        //最后,对于最高位有进位的情况补1        if(carry == 1) sum.insert(0, 1);        return sum.toString();    }}
0 0
原创粉丝点击