题目:LCR 002
解法一:
题目中提到1 <= a.length, b.length <= 10^4
,所以不能将其转为数字来计算,只能按位运算。从个位开始遍历即可,当某一字符串遍历完,而另一字符串还没遍历完时,高位补零即可。也可以提前比较a和b的长度,在遍历前就高位补0,这样遍历时就不需要做判断。
class Solution {
public String addBinary(String a, String b) {
StringBuffer ans = new StringBuffer();
int n = Math.max(a.length(), b.length()), carry = 0;
for (int i = 0; i < n; ++i) {
carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
ans.append((char) (carry % 2 + '0'));
carry /= 2;
}
if (carry > 0) {
ans.append('1');
}
ans.reverse();
return ans.toString();
}
}
注意点:
- 由于遍历是从低位遍历,计算结果也是从低位开始追加,所以返回结果时需要反转字符串,也可以在遍历前就反转a和b
- 遍历完后,还需检查下进位变量,若有进位,则再追加到结果中。