您的位置:首页 > 其它

LintCode | 408. 二进制求和

2017-03-12 21:23 260 查看
给定两个二进制字符串,返回他们的和(用二进制表示)。

比较蠢的办法

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lintcode