汉诺塔问题:将n个盘子从left柱,借助mid柱,放至right柱(大的盘子不能放在小的盘子上)
可以分解为以下三个步骤:
- 把n-1个盘子,从left,借助mid,放至right上
- 把最大的盘子,从left,放至right上。
- 把n-1个盘子从mid,借助left,放至right上
tips:经过前两步操作,最大的盘子已经就位,无需移动且对问题不再产生影响。相当于问题已经重置,需要将剩下的n-1个盘子,移动至righ柱子上。盘子均放在mid柱上,相当于初始时的left。
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @return string字符串一维数组
#
class Solution:
def getSolution(self , n: int) -> List[str]:
# write code here
self.ans = []
self.Hanoi(n, "left", "mid", "right")
return self.ans
# 定义汉诺塔问题,将n个盘子,从left,借助mid,移动到right上
def Hanoi(self, n, left, mid, right):
# 递归的停止条件
if n == 0:
return
else:
# 1、将n-1个盘子,从left,借助right,移动到mid上
self.Hanoi(n - 1, left, right, mid)
# 2、将最大的盘子从left,移动至right
t = "move from " + left + " to " + right
self.ans.append(t)
# 3、把n-1盘子,从mid借助left,移动至right上
self.Hanoi(n -1, mid, left, right)