Problem: 67. 二进制求和
文章目录
- 思路
- 复杂度
- Code
思路
👨🏫 参考
复杂度
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
Code
class Solution {
public String addBinary(String a, String b)
{
StringBuilder ans = new StringBuilder();
int carry = 0;// 记录进位
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--)
{
int sum = carry;// 加上进位
sum += i >= 0 ? a.charAt(i) - '0' : 0;// 加上 a 的当前位,没有就补 0
sum += j >= 0 ? b.charAt(j) - '0' : 0;// 加上 b 的当前位,没有就补 0
ans.append(sum % 2);// 添加到尾部
carry = sum / 2;// 向上进位
}
ans.append(carry == 1 ? carry : "");// 处理最后一个可能的进位
// 翻转后即是结果
return ans.reverse().toString();
}
}