自学内容网 自学内容网

算法训练营第38天|LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

终于迎来了动态规划!

动态规划五部曲

1.dp数组以及小标含义

2.递推公式

3.dp数组如何初始化

4.遍历

5.打印dp数组

LeetCode 509. 斐波那契数

题目链接:

LeetCode 509. 斐波那契数

解题思路:

按照迭代公式,进行递归.

代码:

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

 

LeetCode 70. 爬楼梯

题目链接:

LeetCode 70. 爬楼梯

解题思路:

当前楼梯数可以由上两个楼梯的方法数推到出来。

代码:

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

LeetCode 746. 使用最小花费爬楼梯 

题目链接:

LeetCode 746. 使用最小花费爬楼梯 

解题思路:

最小花费为,前一个节点的花费加上前一个节点的cost和前两个节点的花费加上前两个节点的cost的最小值。

代码:

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


原文地址:https://blog.csdn.net/qq_53125539/article/details/137681495

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!