是否有运行时间小于 O(2 n ) 的河内塔的解决方案,其中n是要移动的磁盘数量?我的解决方案需要 O(2 n ) 时间。
此外,以下解决方案是递归的。我们可以使用带有记忆概念的动态编程在更短的时间内解决这个问题吗?
public void towersOfHanoi(
int num,
MyStack<Integer> from,
MyStack<Integer> to,
MyStack<Integer> spare
) {
if (num == 1) {
int i = from.pop();
to.push(i);
System.out.println("Move "+i+" from "+from.getName()+" to " + to.getName());
return;
}
towersOfHanoi(num - 1, from, spare, to);
towersOfHanoi(1, from, to, spare);
towersOfHanoi(num - 1, spare, to, from);
}
MyStack
Stack
是Java中类的扩展版本,它添加了name
字段和访问器。
另外,同一个问题是否有任何变化?