题解 | #汉诺塔问题#

汉诺塔问题

https://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185

import java.util.*;


public class Solution {
   
   
    public ArrayList<String> getSolution (int n) {
        // write code here
        ArrayList<String> ret = new ArrayList<>();
       
        String left ="left",mid = "mid",right="right";
        dfs(n,left,mid,right,ret);

        return ret;
    }
    //递归  :String 对应的是出发;借助:目的的
    public void dfs(int n, String left, String mid,String right,List<String> list){
        String s ;
        //直接移动
        if(n==1){
            s = "move from " +left +" to "+right;
            //将此次操作记录
            list.add(s);
            //直接返回 函数出口
            return;
        }
        //不为1,先以动n-1个,从left借助right到mid;
        dfs(n-1,left,right,mid,list);

        //然后将最大一个移动到right;
         s = "move from "+left+" to "+right;
         list.add(s);
         //最后将mid上的借助left移动到rigft上
         dfs(n-1,mid,left,right,list);
    }
}

全部评论

相关推荐

03-10 11:23
门头沟学院 Java
鹿LF:计算机面试就跟数学题一样,没什么实际价值,但只能这么筛选,本质是考察你的努力,智力和学习能力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务