509. 斐波那契数 70. 爬楼梯

509. 斐波那契数

采用动态规划思想

第一步 确定dp数组和 i的含义 :

             i表示第i天有几只兔子

第二步 确定递推公式 :

             f(n) = f(n-1) + f(n-2)

第三部 dp数组的初始化

             将dp【0】 和 dp【1】 初始化为0,1

第四步 确定遍历顺序

             采用从前往后遍历就行

第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样

class Solution {
public:

    int fib(int n) {
        if ( n <= 0 ) return 0;
        int dp[n + 1];
        dp[0] = 0;
        dp[1] = 1;
        for ( int i = 2 ; i < n + 1 ; i++ ) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];

    }
};

70. 爬楼梯

采用动态规划思想

第一步 确定dp数组和 i的含义 :

             dp【i】 表示 登上第i层楼梯 有多少种方法

第二步 确定递推公式 :

             f(n) = f(n-1) + f(n-2)

第三部 dp数组的初始化

             将dp【1】 和 dp【2】 初始化为1,2

第四步 确定遍历顺序

             采用从前往后遍历就行

第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样

注意此题 dp【1】 表示登上第1层楼梯有几种方法 :一种 跨一步

                dp【2】表示登上第2层楼梯有几种方法: 2种 跨两次一步  和  跨两步

                dp【3】 表示登上第3层楼梯有几种方法: 3 种 先登上第一层楼梯 在登上两层楼梯

class Solution {
public:
    int climbStairs(int n) {
        if ( n < 3) return n;
        vector < int > dp(n + 1);
        dp[1] = 1;
        dp[2] = 2;
        for ( int i = 3 ; i < n + 1 ; i++ ) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值