欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 算法训练(leetcode)第二十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

算法训练(leetcode)第二十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

2025/10/18 6:49:59 来源:https://blog.csdn.net/weixin_43872997/article/details/140360267  浏览:    关键词:算法训练(leetcode)第二十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

刷题记录

  • 509. 斐波那契数
    • 递归
    • 循环
    • 动态规划
  • 70. 爬楼梯
  • 746. 使用最小花费爬楼梯

509. 斐波那契数

leetcode题目地址

递归

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:int fib(int n) {if(n<2) return n;return fib(n-1) + fib(n-2); }
};

循环

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

//c++
class Solution {
public:int fib(int n) {if(n<2) return n;int a=0, b=1;for(int i=2; i<=n; i++){swap(a, b);b += a;}return b;}
};

动态规划

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:int fib(int n) {if(n<2) return n;vector<int> dp(n+1, 0);dp[1]=1;for(int i=2; i<=n; i++){dp[i] = dp[i-1] + dp[i-2]; }return dp[n];}
};

70. 爬楼梯

leetcode题目地址

本质上还是斐波那契数列。用递归会在45处时间超限。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// c++
class Solution {
public:int climbStairs(int n) {if(n<=2) return n;int a=1, b=2;for(int i=3; i<=n; i++){swap(a,b);b+=a;}return b;}
};

746. 使用最小花费爬楼梯

leetcode题目地址

动态规划。使用dp记录到达第i个楼梯所需要花费的费用。起始位置不需要支付费用,而起始位置可以是0和1,因此0、1位置的dp值为0.从2开始计算当前位置所需的最小花费。到达第i层的费用等于到达前一步的最小花费+前一步的花费。具体来说,若前一步是爬1个台阶到达第i层,则第i层的花费为cost[i-1]+dp[i-1];若前一步是爬2个台阶到达第i层,则第i层的花费为cost[i-2]+dp[i-2]。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

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

优化空间:上面的代码中起始每次都是只操作前面两个空间,因此只使用两个变量来计算既可。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词