算法题:汉诺塔
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hanota-lcci
 public static void movePlant(int size, List<Integer> first,List<Integer> second,List<Integer> third){
        //如果只剩下一个盘子,直接将他从第一个柱子移动到第三个柱子
        if (size == 1){
            third.add(first.remove(first.size()-1));
            return;
        }
        //首先将n-1个盘子,从第一个柱子移动到第二个柱子
        movePlant(size-1,first,third,second);
        //然后将最后一个盘子移动到第三个柱子上
        third.add(first.remove(first.size()-1));
        //最后将第二个柱子上的n-1个盘子,移动到第三个柱子上
        movePlant(size -1 ,second,first,third);
    }
分析:汉诺塔的考点是对递归的运用
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号