题解 | 汉诺塔问题
汉诺塔问题
https://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185
import java.util.*;
public class Solution {
//这道题我也不太懂,反正是套了个n=2,n=3的样例进去,就很容易理清了,但是n大了之后就感觉这种递归分治的方法好像缺少了什么东西一样。
public void Hanoi(List<String>ans, int n, String left, String mid, String right){
if(n==0) return;
Hanoi(ans, n-1, left, right, mid);//把n-1个盘子从left借助right搬到mid上去。
ans.add("move from "+left+" to "+right);//把第n个盘子从left搬到right上。
Hanoi(ans, n-1, mid, left, right);//把n-1个牌子从mid借助left搬到right上
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return string字符串ArrayList
*/
public ArrayList<String> getSolution (int n) {
List<String> ans = new ArrayList<>();
Hanoi(ans, n, "left", "mid", "right");
return (ArrayList<String>)ans;
}
}