题目链接:https://leetcode-cn.com/problems/add-binary/
解题思路
这题有点类似于大数相加,只不过这题是二进制。我们可以用t当作进位,然后模拟我们手写加法。
代码
class Solution {
public String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder(); //答案
int i = a.length() - 1, j = b.length() - 1; //从最后开始遍历(个位)
int t = 0; //进位
while(i >= 0 || j >= 0 || t != 0) { //如果没有遍历完两个数,或者还有进位
if(i >= 0) t += a.charAt(i--) - '0'; //如果a还有数
if(j >= 0) t += b.charAt(j--) - '0'; //如果b还有数
ans.append(t % 2); //加入当前位的和取模
t /= 2; //进位
}
return ans.reverse().toString(); //由于计算之后是个位在第一位,所以要反转
}
}
复杂度分析
- 时间复杂度:O(max(n + m))
- 空间复杂度:O(max(n, m))