67.二进制求和

67. 二进制求和
题意
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
难度
简单
示例
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"
分析
我们先前做过 002.两数相加,其实和本题差不多,只不过是把链表换成了字符串,把十
进制换成了二进制。
我们还是这样来做,从低位到高位依次将每个二进制数相加,并且记录相应的进位。十进
制是逢十进一,二进制则是逢二进一,把先前代码中的 10 用 2 替换即可。
class Solution {
public String addBinary(String a, String b) {
StringBuilder res = new StringBuilder();
int upper = 0;
for(int i = a.length() - 1,j = b.length() - 1;i >= 0 || j >= 0;i--,j--){
int nowPos = upper;
nowPos += i >= 0 ? a.charAt(i) - '0' : 0;
nowPos += j >= 0 ? b.charAt(j) - '0' : 0;
upper = nowPos / 2;
nowPos %= 2;
res.append(nowPos);
}
if(upper != 0)
res.append(upper);
res.reverse();
return res.toString();
}
}
别忘了,因为我们是从低位到高位来做的,所以必须要翻转一下,同时,要考虑最后一位
是否会产生进位,如果产生进位,同样需要将这个纳入答案当中。
1671508275695-e84a3d81-8e12-4e9b-9b60-749fdad61de8.png
总结
简单题,同样需要认真地对待,在一些时候,我们只有一次的提交机会,所以不能因为题
目简单,就轻视它,最终惩罚的还是我们自己。
力扣链接:https://leetcode.cn/problems/add-binary/