【发布时间】:2013-10-28 03:55:07
【问题描述】:
一个孩子正在跑上 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。
【问题讨论】:
-
这看起来有点像家庭作业问题...
-
到目前为止你尝试了什么?
-
@IMSoP,我们应该还是不应该回答这样的问题,如果它们看起来很像复制/粘贴到这里的家庭问题?
-
@Roman 这里有提出和回答家庭作业问题的指南:meta.stackexchange.com/questions/10811/…
-
它来自哪里并不重要(好吧,根据某些人的说法,答案应该不同)。让我改写@IMSoP 的评论 - “这看起来很可疑,就像一个刚刚从某个地方复制的问题,没有表现出任何自己解决问题的尝试,这不适合Stack Overflow”。