递归实现 汉诺谈

汉诺塔问题

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)



全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务