[演算法練習及思路-程式設計師面試金典(Java解法)]No46.漢諾塔問題
題號:no46
題目名:漢諾塔問題
原題URL:https://leetcode-cn.com/problems/hanota-lcci/
題目描述
在經典漢諾塔問題中,有 3 根柱子及 N 個不同大小的穿孔圓盤,盤子可以滑入任意一根柱子。一開始,所有盤子自上而下按升序依次套在第一根柱子上(即每一個盤子只能放在更大的盤子上面)。移動圓盤時受到以下限制:
(1) 每次只能移動一個盤子;
(2) 盤子只能從柱子頂端滑出移到下一根柱子;
(3) 盤子只能疊在比它大的盤子上。
請編寫程式,用棧將所有盤子從第一根柱子移到最後一根柱子。
你需要原地修改棧。
示例
示例 1:
輸入:A = [2, 1, 0], B = [], C = []
輸出:C = [2, 1, 0]
示例 2:
輸入:A = [1, 0], B = [], C = []
輸出:C = [1, 0]
限制
- A中盤子的數目不大於14個。
思路
1.遞迴,遞迴思維如下
漢諾塔移動步驟
1.將A的頂部那塊移動到B
2.將A頂部那塊移動到C
3.將B頂部那塊移動到C
解題程式碼
public class Solution {
public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {
/* 漢諾塔移動步驟
1.將A的頂部那塊移動到B
2.將A頂部那塊移動到C
3.將B頂部那塊移動到C
*/
hanota(A,B,C,A.size());
}
private void hanota(List<Integer> a, List<Integer> b, List<Integer> c, int size) {
if(a.size()==1) {
c.add(a.remove(0));
return;
}
//將A的頂部那塊移動到B
hanota(a,c,b,size-1);
//將A的頂部那塊移動到C
hanota(a,b,c,1);
//將B頂部那塊移動到C
hanota(b,a,c,size-1);
}
}
相關文章
- [演算法練習及思路-程式設計師面試金典(Java解法)]No85計算器演算法程式設計師面試Java
- [演算法練習及思路-程式設計師面試金典(Java解法)]No77連續數列演算法程式設計師面試Java
- 【程式設計師面試金典】20180801程式設計師面試
- 【程式設計師面試金典】洪水程式設計師面試
- Java初中級程式設計師面試題寶典Java程式設計師面試題
- Java程式設計師面試題及解答Java程式設計師面試題
- 程式設計師面試金典Chapter1程式設計師面試APT
- Java程式設計師面試時應注意的三個經典問題!Java程式設計師面試
- 智力題(程式設計師面試經典)程式設計師面試
- Java程式設計師面試常見問題Java程式設計師面試
- 遞迴求解漢諾塔問題遞迴
- Python實現:漢諾塔問題Python
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- 【JAVA面試資料】程式設計師面試之葵花寶典2Java面試程式設計師
- 【JAVA面試資料】程式設計師面試之葵花寶典1Java面試程式設計師
- 程式設計師50+Java面試題程式設計師Java面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 奇怪的漢諾塔 - 題解
- python3:遞迴解漢諾塔問題Python遞迴
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- PHP實現漢諾塔演算法PHP演算法
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 5年程式設計師面試,常見面試問題解析程式設計師面試
- 漢諾塔-PythonPython
- SQL 漢諾塔SQL
- 2018年Java程式設計師最新BAT面試題Java程式設計師BAT面試題
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 漢羅塔問題 java實現Java
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 好程式設計師java分享Java面試寶典:類的載入過程程式設計師Java面試
- Java程式設計師面試學習資料彙總Java程式設計師面試
- 遞迴-*漢諾塔遞迴
- 漢諾塔詳解