动态规划(斐波那契系列)---爬楼梯

动态规划

  递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保留了子问题的解,避免了重复计算。

爬楼梯

70. Climbing Stairs (Easy)

题目描述:

  有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。

思路分析:

  定义一个dp数组存储上楼梯的方法数,dp[i]表示走到第i层楼的方法数,第i层楼梯可以从第i-1层和i-2个楼梯再走一步到达。那么走到第i层楼梯的方式为走到第i-1层的方式和第i-2层的方式和。

dp[ i ]=dp[i-1]+dp[i-2]

代码:

class Solution {
    public int climbStairs(int n){
    int []dp=new int[n+1];
    if(n==1)
        return 1;
    if(n==2)
        return 2;
    dp[1]=1;
    dp[2]=2;
    for(int i=3;i<=n;i++){
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
}
}
posted @ 2019-07-01 19:39  yjxyy  阅读(160)  评论(0编辑  收藏  举报