python3:遞迴解漢諾塔問題
此公眾號會發表計算機考研(初複試資訊)、夏令營等資料,方便考研人對資訊的獲取,節約自身查詢資料的時間,回覆408,可獲得資料結構、作業系統、計算機網路、計算機組成原理全科資料
問題
在經典漢諾塔問題中,有 3 根柱子及 N 個不同大小的穿孔圓盤,盤子可以滑入任意一根柱子。一開始,所有盤子自上而下按升序依次套在第一根柱子上(即每一個盤子只能放在更大的盤子上面)。移動圓盤時受到以下限制:
(1) 每次只能移動一個盤子;
(2) 盤子只能從柱子頂端滑出移到下一根柱子;
(3) 盤子只能疊在比它大的盤子上。請編寫程式,用棧將所有盤子從第一根柱子移到最後一根柱子。
你需要原地修改棧。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/hanota-lcci
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解題思路:遞迴與分治
n = 1 時,直接把盤子從 A 移到 C;
n > 1 時,
先把上面 n - 1 個盤子從 A 移到 B(子問題,遞迴);
再將最大的盤子從 A 移到 C;
再將 B 上 n - 1 個盤子從 B 移到 C(子問題,遞迴)。
python3
class Solution:
def hanota(self, A: List[int], B: List[int], C: List[int]) -> None:
n = len(A)
self.move(n, A, B, C)
# 定義move 函式移動漢諾塔
def move(self,n, A, B, C):
if n == 1:
C.append(A[-1])
A.pop()
return
else:
self.move(n-1, A, C, B) # 將A上面n-1個通過C移到B
C.append(A[-1]) # 將A最後一個移到C
A.pop() # 這時,A空了
self.move(n-1,B, A, C) # 將B上面n-1個通過空的A移到C
相關文章
- 遞迴實現漢諾塔問題遞迴
- 漢諾塔和遞迴遞迴
- C#中漢諾塔問題的遞迴解法C#遞迴
- 經典遞迴解決漢諾塔!遞迴
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- 化繁為簡 經典的漢諾塔遞迴問題 in Java遞迴Java
- 漢諾塔非遞迴演算法遞迴演算法
- 漢諾塔非遞迴棧程式碼遞迴
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- c++遞迴與迭代實現漢諾塔C++遞迴
- 從漢諾塔遊戲理解python遞迴函式遊戲Python遞迴函式
- 奇怪的漢諾塔 - 題解
- js解決漢諾塔問題程式碼例項JS
- 百練OJ:4147:漢諾塔問題(Hanoi)——python實現漢諾塔Python
- Python實現:漢諾塔問題Python
- 漢諾塔詳解
- js漢諾塔問題解決方法程式碼例項JS
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- SQL 漢諾塔SQL
- 遞迴解決全排列問題遞迴
- 漢諾塔-PythonPython
- ACM 漢諾塔(三)ACM
- 遞迴思想----解決飲料問題遞迴
- Josephus問題解決方法五(遞迴)遞迴
- 漢諾塔的實現
- 漢諾塔通項公式公式
- 遞迴路徑問題遞迴
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構
- 小知識系列(3):Hanoi塔(漢諾塔,河內塔)
- 樹遞迴問題的求解遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 用棧+回溯+非遞迴解決N皇后問題遞迴
- 漢諾塔遊戲《演算法很美》遊戲演算法
- hanoi漢諾塔C++實現C++
- 漢諾塔演算法演示1.0演算法
- hdu2048遞迴問題遞迴
- hdu2049遞迴問題遞迴
- 原:八皇后問題的遞迴和非遞迴Java實現遞迴Java