标签:面试题 移到 20 08.06 汉诺塔 moveDisks 2n
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)。
标签:面试题,移到,20,08.06,汉诺塔,moveDisks,2n 来源: https://blog.csdn.net/weixin_45561634/article/details/120354609
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。