递归实现 汉诺谈
汉诺塔问题
http://www.nowcoder.com/questionTerminal/7d6cab7d435048c4b05251bf44e9f185
把汉诺塔 问题是将 问题细分为 小问题。
要把所有 左边的盘子 移动到 最右边
首先 需要把 非底盘的盘子 移动到 中间柱子
然后 把地盘的盘子 放到 右边的柱子
最后再把 中间柱子 非底盘的盘子 移动到 右边的柱子
class Solution:
def getSolution(self , n ):
# 返回 结果
self.ans = []
# 开始 汉诺塔
self.hanoi(n, 'left', 'mid', 'right')
return self.ans
def hanoi(self, n, left, mid, right):
if n == 1:
# 只剩 一个 盘子, 需要 从 左边 移动到 右边 即可
self.move(left, right)
else:
# 把 左边的 移动 到 中间
self.hanoi(n - 1, left, right, mid)
# 左边的 移动到 右边
self.move(left, right)
# 中间的 移动到 右边
self.hanoi(n - 1, mid, left, right)
def move(self, left, right):
# 打印 移动操作
self.ans.append('move from ' + left + ' to ' + right)

字节跳动公司福利 1309人发布