题解 | #汉诺塔问题#

汉诺塔问题

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);
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务