LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题

LeetCode 面试题 08.06. 汉诺塔问题

题目

LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题

解题

LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题
LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题

// javascript
var hanota = function(A, B, C) {
    let n = A.length;
    moveDisks(n, A, B, C);
};

var moveDisks = function(n, A, B, C) {
    if (n < 1) return;
    moveDisks(n - 1, A, C, B); // 将A上面n-1个通过C移到B
    C.push(A.pop());           // 将A的最后一个移到C
    moveDisks(n - 1, B, A, C); // 将B上面n-1个通过空的A移到C
};

LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题
T ( n ) = 2 ∗ T ( n − 1 ) + 2 0 = 2 2 ∗ T ( n − 2 ) + 2 1 + 2 0 = . . . = 2 n − 1 + 2 n − 2 + . . . + 2 1 + 2 0 = 2 n − 1 T(n) = 2*T(n-1)+2^0= 2^2*T(n-2)+2^1+2^0=...=2^{n-1} + 2^{n-2} +...+2^1+2^0=2^n-1 T(n)=2∗T(n−1)+20=22∗T(n−2)+21+20=...=2n−1+2n−2+...+21+20=2n−1

时间复杂度: O ( 2 n − 1 ) O(2^n-1) O(2n−1),一共需要移动的次数。
空间复杂度: O ( 1 ) O(1) O(1)。

上一篇:数据结构绪论


下一篇:[数学]卡特兰数