[演算法練習及思路-程式設計師面試金典(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
- 【程式設計師面試金典】洪水程式設計師面試
- C#中漢諾塔問題的遞迴解法C#遞迴
- 百練OJ:4147:漢諾塔問題(Hanoi)——python實現漢諾塔Python
- 化繁為簡 經典的漢諾塔遞迴問題 in Java遞迴Java
- 程式設計師面試金典Chapter1程式設計師面試APT
- Java初中級程式設計師面試題寶典Java程式設計師面試題
- Java程式設計師面試題及解答Java程式設計師面試題
- 程式設計師面試金典--筆記(精華篇)程式設計師面試筆記
- Java程式設計師面試時應注意的三個經典問題!Java程式設計師面試
- 16個經典面試問題及回答思路面試
- 智力題(程式設計師面試經典)程式設計師面試
- Java程式設計師面試常見問題Java程式設計師面試
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- JAVA程式設計師面試32問Java程式設計師面試
- JAVA程式設計師面試之《葵花寶典》等Java程式設計師面試
- js解決漢諾塔問題程式碼例項JS
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- 【程式設計師面試金典】20180801程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----清除行列View程式設計師面試
- Python實現:漢諾塔問題Python
- 遞迴實現漢諾塔問題遞迴
- 《Cracking the Coding Interview程式設計師面試金典》----詞頻統計View程式設計師面試
- 【JAVA面試資料】程式設計師面試之葵花寶典1Java面試程式設計師
- 【JAVA面試資料】程式設計師面試之葵花寶典2Java面試程式設計師
- 經典遞迴解決漢諾塔!遞迴
- js漢諾塔問題解決方法程式碼例項JS
- 《Cracking the Coding Interview程式設計師面試金典》----空格替換View程式設計師面試
- 程式設計師50+Java面試題程式設計師Java面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- Java程式設計師集合框架面試題Java程式設計師框架面試題
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 《Cracking the Coding Interview程式設計師面試金典》----貓狗收容所View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----子串判斷View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最長合成字串View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----數字發音View程式設計師面試