【发布时间】:2017-11-03 15:36:53
【问题描述】:
我正在解决以下问题:
你正在爬楼梯。到达顶部需要 n 步。 每次您可以爬 1 或 2 级台阶。您可以通过多少种不同的方式登顶?
通过构造如下代码sn-p:
class Solution {
public:
int climbStairs(int n) {
if(n==0)
return 0;
vector<int> dp(n+1);
dp[0]=0;
dp[1]=1;
for(int i=2; i<=n; i++)
dp[i] = dp[i-1] + dp[i-2];
return dp[n];
}
};
当我查看解决方案时,我发现他们进行了这个初始化:
dp[0]=0;
dp[1]=1;
dp[2]=2; //--> Why? And when to do this?
由于我初始化它的方式,我得到了较低的值(比如n 的答案是dp[n-1] 等等)。这一切,只是因为我没有初始化dp[2]=2。有人可以指出这个特定初始化背后的直觉吗?
谢谢!
注意:问题来自LeetCode.com。
【问题讨论】:
-
顺便说一句:我在 LeetCode 上看到了很多很好的教程,但也看到了很多写得很糟糕的代码或糟糕的例子。对你在那里发现的东西持怀疑态度是有益的。
-
这是斐波那契,不是吗?