题目描述
对于传统的汉诺塔游戏我们做一个拓展,我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,请实现一个函数打印最优移动轨迹。
给定一个int n,表示有n个圆盘。请返回一个string数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid/right]。
测试样例:
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[:])