Algorithms first
二进制求和 · 交互式算法学习
返回两个二进制字符串之和。
#67 · 位运算
二进制求和
Add Binary
a = "11", b = "1"线性序列3 个关键状态
步骤 1最低位 1+1=2,写 0 进 1。
out=0,carry=11
01
1+
21
3推荐
逐位相加与进位
时间
O(max(m,n))空间 O(max(m,n))从右向左相加,当前位取 sum%2,进位取 sum//2。
1function addBinary(a, b) {2 let i = a.length - 1,3 j = b.length - 1,4 carry = 0,5 out = '';6 while (i >= 0 || j >= 0 || carry) {7 const s = +(a[i--] || 0) + +(b[j--] || 0) + carry;8 out = s % 2 + out;9 carry = Math.floor(s / 2)10 }11 return out;12}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public String addBinary(String a, String b) {3 var sb = new StringBuilder();4 int i = a.length() - 1, j = b.length() - 1;5 for (int carry = 0; i >= 0 || j >= 0 || carry > 0; --i, --j) {6 carry += (i >= 0 ? a.charAt(i) - '0' : 0) + (j >= 0 ? b.charAt(j) - '0' : 0);7 sb.append(carry % 2);8 carry /= 2;9 }10 return sb.reverse().toString();11 }12}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
二进制求和 · 解法对比
返回两个二进制字符串之和。
- 测试用例
a = "11", b = "1"- 题目分类
- 位运算
- 解法对比
- 2
转整数后相加
利用大整数解析二进制,再把和转回二进制。
- 时间
O(n)- 空间
O(n)
逐位相加与进位
从右向左相加,当前位取 sum%2,进位取 sum//2。
- 时间
O(max(m,n))- 空间
O(max(m,n))