假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例
比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法
返回 3
解题思路:
动态规划。我也不太明白,凑活看吧。
class Solution {
public:
/**
* @param n: An integer
* @return: An integer
*/
int climbStairs(int n)
{
// write your code here
vector<int> memo(n+1 , -1);
memo[0] = 0;//如果还有0步到达顶部,则有0种方法到达楼顶
memo[1] = 1;//如果还有1步到达顶部,则有1种方法到达楼顶
memo[2] = 2;//如果还有2步到达顶部,则有两种方法到达楼顶
for(int i=3;i<=n;i++)
memo[i] = memo[i-1] + memo[i-2];
return memo[n];
}
};