代码随想录算法训练营29期Day38|LeetCode 509,70,746

文档讲解:动态规划理论基础 斐波那契数 爬楼梯 使用最小花费爬楼梯

509.斐波那契数

题目链接: https://leetcode.cn/problems/fibonacci-number/description/

思路:

当前这个数由上一个数和上上个数推导而来。所以我们每次记录两个数,用来推导下一个就行了。遍历顺序从2到n,当n小于等于2时可直接输出结果。

核心代码:

cpp 复制代码
class Solution {
public:
    int fib(int n) {
        if(n<=1) return n;
        int a,b,c;
        a=0;b=1;
        for(int i=2;i<=n;i++){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
};

70.爬楼梯

题目链接: https://leetcode.cn/problems/climbing-stairs/description/

思路:

我们考虑到达第n阶的方法,由于每次只能上一阶或者两阶,因此第n阶只能由第n-1阶或第n-2阶到达,即到达第n阶的方法 = 到达第n-2阶的方法 + 到达第n-1阶的方法。

写成方程即 dp[i]=dp[i-2]+dp[i-1];

从方程我们知道求当前的数要用到之前的两个数字,所以我们从0遍历到n。由于我们每次只用到两个数字,因此开两个变量记录即可。

核心代码:

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if(n<=2) return n;
        int a,b,c;
        a=1;b=2;
        for(int i=3;i<=n;i++){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
};

746.使用最小花费爬楼梯

题目链接: https://leetcode.cn/problems/min-cost-climbing-stairs/description/

思路:

我们考虑到达第n阶的方法,由于每次只能上一阶或者两阶,因此第n阶只能由第n-1阶或第n-2阶到达,即到达第n阶的最小花费 = min( 到达第n-2阶的最小花费+cost[n-2] , 到达第n-1阶的最小花费+cost[n-1] )。

写成方程即 dp[i] = min( dp[i-2]+cost[i-2] , dp[i-1]+cost[i-1] );

从方程我们知道求当前的数要用到之前的两个数字,所以我们从0遍历到n。由于我们每次只用到两个数字,因此开两个变量记录即可。

核心代码:

cpp 复制代码
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        int a,b,c;
        a=b=0;
        for(int i=2;i<=n;i++){
            c=min(a+cost[i-2],b+cost[i-1]);
            a=b;
            b=c;
        }
        return c;
    }
};

今日总结

今日学习时长1h,今天题目挺简单的,没花什么时间,接着去忙其他工作。

相关推荐
StickToForever16 分钟前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^3 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
黑不溜秋的3 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
欧了1114 小时前
洛谷P9240 [蓝桥杯 2023 省 B] 冶炼金属
职场和发展·蓝桥杯·洛谷·蓝桥杯大学b组c语言
大数据追光猿5 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!5 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉5 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生5 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴5 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯