Algorithms first

二进制求和 · 交互式算法学习

返回两个二进制字符串之和。

#67 · 位运算

二进制求和

Add Binary

测试用例a = "11", b = "1"
线性序列3 个关键状态
步骤 1最低位 1+1=2,写 0 进 1。out=0,carry=1
1
0
1
1
+
2
1
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}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

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 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

二进制求和 · 解法对比

返回两个二进制字符串之和。

测试用例
a = "11", b = "1"
题目分类
位运算
解法对比
2
方案 1

转整数后相加

利用大整数解析二进制,再把和转回二进制。

时间
O(n)
空间
O(n)
方案 2

逐位相加与进位

从右向左相加,当前位取 sum%2,进位取 sum//2。

时间
O(max(m,n))
空间
O(max(m,n))