LeetCode 面试题 08.06. 汉诺塔问题
递归
class Solution {
public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {
move(A.size(), A, B, C);
}
// 将 A 的 n 个盘子通过 B 移动到 C
private void move(int n, List<Integer> A, List<Integer> B, List<Integer> C) {
if (n == 1) {
C.add(A.remove(A.size() - 1)); // 只有一个盘子,直接从 A 移动到 C
return;
}
move(n-1, A, C, B); // 先将 A 的 n-1 个盘子移动到 B
C.add(A.remove(A.size() - 1)); // 将 A 的最后一个盘子移动到 C
move(n-1, B, A, C); // 将 B 中的所有盘子移动到 C
}
}
- 时间复杂度:
- 空间复杂度: