C/C++教程

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
};

在这里插入图片描述
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)。

这篇关于LeetCode《程序员面试金典》面试题 08.06. 汉诺塔问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!