一个孩子正在跑上 n 步的楼梯,一次可以走 1 步、2 步或 3 步。现在编写一个程序来计算孩子可以用多少种可能的方式跑楼梯。
解决方案看起来像这样(DP可以用来节省时间)
public static int countDP(int n) {
if (n<0)
return 0;
else if (n==0)
return 1;
else {
map[n] = countDP(n-1) + countDP(n-2) + countDP(n-3);
return map[n]; }
}
现在的问题是如何获得这些路径?例如对于 n=4,此函数返回 7,如何获取所有可能的路径?(在这个例子中 1111 - 121 - 112 - 211 - 31 - 13 - 22 )有没有办法通过改变当前程序来做到这一点?
这不是一个家庭作业问题,它来自破解编码面试书的递归和动态编程一章 - 第 9 章 - 问题 1。