题解 | #汉诺塔问题#
汉诺塔问题
https://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185
总结:
1.汉诺塔问题是经典的递归问题,移动n个盘从left借助mid移动到right,可以分解为先将n-1个盘从left借助right移动到mid,再把第n个盘从left直接移动到right,之后再将mid处的n-1个盘从mid借助left移动到right.其中移动n-1个盘的过程又可以划分为类似的小问题,递归就可以解决。结束条件是移动1个盘时,直接移动即可返回上一层。
import java.util.*;
public class Solution {
public ArrayList<String> getSolution(int n) {
// write code here
String left = "left",mid="mid",right="right";
ArrayList<String> list = new ArrayList<>();
hanota(n,left,mid,right,list);
return list;
}
public void hanota(int n,String left,String mid,String right,List<String> list){
String str;
if(n==1){
str = "move from "+left+" to "+right;
list.add(str);
return;
}
hanota(n-1,left,right,mid,list);
str = "move from "+left+" to "+right;
list.add(str);
hanota(n-1,mid,left,right,list);
}
}