题目:给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都在左边的柱子上,按照汉诺塔游戏的要求把所有的圆盘都移动到右边的主子上,实现函数打印最优移动轨迹。
例:
n=1 打印: move from left to right
n=2 打印: move from left to mid
move from left to right
move from mid to right
进阶题目:给定一个整形数组arr,其中只含有1,2,3
代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱
arr[i]的值代表第i+1个圆盘的位置。比如 arr=[3,3,2,1],代表第1个圆盘在右柱,第2个圆盘在右柱,第3个圆盘在中柱上,第4个圆盘在左柱上。 如果arr代表的状态是最优的移动轨迹中出现的状态,就返回是第几个状态;如果不是,就返回-1
- 例子: arr[1,1] 返回0 arr[2,1] 返回1 arr[3,3] 返回3 arr[2,2] 返回-1
- 要求:时间复杂度O(N),额外空间复杂度O(1)
public class 汉诺塔问题 {
public static void main(String[] args) {
hanoi(4, 'a','b','c');
System.out.println(HanoiStatus(new int[]