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
相關文章
- 遞迴求解漢諾塔問題遞迴
- 遞迴-*漢諾塔遞迴
- 漢諾塔和遞迴遞迴
- 課時24:遞迴:漢諾塔遞迴
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- 奇怪的漢諾塔 - 題解
- 從漢諾塔遊戲理解python遞迴函式遊戲Python遞迴函式
- Python實現:漢諾塔問題Python
- 漢諾塔詳解
- 漢諾塔-PythonPython
- SQL 漢諾塔SQL
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構
- 遞迴問題遞迴
- 遞迴解決全排列問題遞迴
- 小知識系列(3):Hanoi塔(漢諾塔,河內塔)
- 漢羅塔問題 java實現Java
- PHP實現漢諾塔演算法PHP演算法
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 遞迴-*全排列問題遞迴
- 遞迴路徑問題遞迴
- hdu2048遞迴問題遞迴
- hdu2049遞迴問題遞迴
- 樹遞迴問題的求解遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- Java解決遞迴造成的堆疊溢位問題Java遞迴
- 以Top-Down思維去解決問題——遞迴遞迴
- [演算法練習及思路-程式設計師面試金典(Java解法)]No46.漢諾塔問題演算法程式設計師面試Java
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- 第七章 遞迴、DFS、剪枝、回溯等問題 ------------- 7.3 題解:機器人走方格問題遞迴機器人
- 寶塔後臺解決寶塔相關問題
- Python3之遞迴函式簡單示例Python遞迴函式
- ch2_8_3求解迴文序列問題(遞迴實現)遞迴
- 手把手教你用java實現資料結構(五)-----查詢(二分法),遞迴(斐波那契數列,漢諾塔)演算法Java資料結構遞迴演算法
- 請教一個切片遞迴賦值的問題遞迴賦值
- 寶塔解決 mkdir() Permission Denied 的問題
- ?30 秒瞭解尾遞迴和尾遞迴優化遞迴優化