继续做一道easy的动态规划题目,通过率38%
题目大意:
现在给定一个有n个台阶的楼梯,你现在在最下面,而且你每步只能迈一个或者两个台阶。如果要你到达楼梯的顶端,你可以采用几种不同的方法来走。
算法:
用动态规划算法来解决这道题目,首先我们考虑第一步的问题。第一步可以走两个台阶,也可以走一个台阶,所以就分了两种情况。一种情况是,我们第一步只走一个台阶,这样的话,就有f(n-1)种走法,同样的,如果我们第一步走两个台阶,我们就有了f(n-2)种走法。
现在我们要考虑的问题就是,给定初始值。f(0)=0,f(1)=1,f(2)=2,这是我们已知的三个初始值,所以我们的程序就非常简单,复杂度为O(n)。
代码:
class Solution
{
public:
int climbStairs(int n)
{
if(n==0) return 0;
if(n==1) return 1;
if(n==2) return 2;
int k1=1,k2=2,k3=3;
for(int i=3;i<=n;i++)
{
k3=k1+k2;
k1=k2;
k2=k3;
}
return k3;
}
};