递归实现 汉诺谈

汉诺塔问题

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)



全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了 ,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在...:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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