一、题目描述
示例:
二、解题思路
**将两个字符串用0补到长度相同,保证全程可以进行同样的操作。**实际操作时,对两个字符串逆向进行处理,并在下标超出0时,对应的值都为0即可。
使用StringBuffer用于保存结果,最后调用StringBuffer的reverse方法反转,即可得到正确的答案。
三、编程实现
class Solution {
public String addBinary(String a, String b) {
if(a.length() < 1 || b.length() > Math.pow(10,4))
return null;
StringBuffer sb = new StringBuffer();
int isPlus = 0; //标志是否进位
for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
int sum = isPlus; //有进位则加1
//相当于把两个字符串用0补到一样长
sum += i >= 0 ? a.charAt(i) - '0' : 0;
sum += j >= 0 ? b.charAt(j) - '0' : 0;
sb.append(sum % 2);
isPlus = sum / 2;
}
if (isPlus == 1)
sb.append(1);
return sb.reverse().toString();
}
}
for循环的条件,同时对两个字符串的码点进行遍历。特别要注意的是,判断循环是否继续时,用的是i >= 0 || j >= 0,或。这就是把两个字符串视作相同长度,当下标小于零的时候,都看做是0即可。
//相当于把两个字符串用0补到一样长
sum += i >= 0 ? a.charAt(i) - '0' : 0;
sum += j >= 0 ? b.charAt(j) - '0' : 0;