漢諾塔I

題目描述

對於傳統的漢諾塔遊戲咱們作一個拓展,咱們有從大到小放置的n個圓盤,開始時全部圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求咱們要把全部的圓盤都移到右邊的柱子上,請實現一個函數打印最優移動軌跡。數組

給定一個int n,表示有n個圓盤。請返回一個string數組,其中的元素依次爲每次移動的描述。描述格式爲: move from [left/mid/right] to [left/mid/right]。app

測試樣例:
1
返回:move from left to right
思路:遞歸
代碼實現
class Hanoi:
    def chkStep(self, arr, n):
        # write code here
        self.initStatus = [1]*n
        self.allStatus = [[1]*n]
        self.move(n,1,2,3)
        i = 0
        for s in self.allStatus:
            if s == arr:
                return i
            i = i+1
        return -1
    def move(self, n, left, mid, right):
        if n <= 0:
            return
        self.move(n-1, left, right, mid)
        self.change(n, right)
        self.move(n-1, mid, left, right)
    def change(self, n, right):
        self.initStatus[n-1] = right
        self.allStatus.append(self.initStatus[:])
相關文章
相關標籤/搜索