递归实现 汉诺谈

汉诺塔问题

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)



全部评论

相关推荐

06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务