LeetCode刷题笔记-动态规划-day2

LeetCode刷题笔记-动态规划-day2

70. 爬楼梯

1.题目

原题链接:70. 爬楼梯

image-20220206085509252

2.解题思路

算法:递推

定义数组f[i]表示到第i级台阶的总方案数,走到第i级台阶的前一步可能走了1级台阶,也可能走了2级台阶,所以这里可以得到递推式:

 f[i]=f[i-1]+f[i-2];

最终递推一遍即可。

3.代码

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

746. 使用最小花费爬楼梯

1.题目

原题链接:746. 使用最小花费爬楼梯

image-20220206085528836

image-20220206085539756

2.解题思路

算法:递推

由题意可知,到达第i级台阶需要的总费用等于第i级台阶自身需要的费用加上经过前面台阶的总费用,而每次可以选择向上爬一个或者两个台阶。可以得出递推式:

f[i]=c[i]+min(f[i-1],f[i-2]);

初始化: f[0]=c[0],f[1]=c[1];

最终楼梯顶部为n号台阶,我们只需要算出第n-1n-2级台阶的值,取两者之间最小值即可。

3.代码

class Solution {
    
    
public:
    int minCostClimbingStairs(vector<int>& c) {
    
    
        int n=c.size();
        vector<int> f(n+1);
        f[0]=c[0],f[1]=c[1];
        for(int i=2;i<n;i++)
            f[i]=c[i]+min(f[i-1],f[i-2]);
        return min(f[n-1],f[n-2]);
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45966440/article/details/122799646
今日推荐