自助建站平台哪家好,超级seo企业网站系统,网络营销产品的整体概念,网络推广怎么赚钱题目#xff1a;理论基础
文章链接#xff1a;代码随想录 视频链接#xff1a;动态规划理论基础
动态规划五部曲#xff1a;
确定dp数组#xff08;dp table#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目#xff1a;509. 斐…题目理论基础
文章链接代码随想录 视频链接动态规划理论基础
动态规划五部曲
确定dp数组dp table以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目509. 斐波那契数
文章链接代码随想录
视频链接LeetCode:509.斐波那契数
题目链接力扣题目链接
图释
class Solution {
public:// 确定dp数组dp table以及下标的含义 vectorint dp, dp[i]表示第n哥斐波那契数 // 确定递推公式 dp[i]dp[i-1]dp[i-2]// dp数组如何初始化 dp[0]1, dp[1]1// 确定遍历顺序 从前往后// 举例推导dp数组 int fib(int n) {if(n0)return 0;if(n1) return 1;vectorint dp(n1);dp[0]0;dp[1]1;for(int i2; in; i){//从2开始直到第n个数dp[i] dp[i-1]dp[i-2];}return dp[n];}
};
class Solution {
public:int traversal(int n){// 终止条件if(n1) return 1;if(n0) return 0;// 递归return traversal(n-1)traversal(n-2);} int fib(int n) { return traversal(n);}
};再精简
class Solution {
public:int fib(int n) { // 终止条件if(n1) return 1;if(n0) return 0;return fib(n-1)fib(n-2);}
};
题目70. 爬楼梯
文章链接代码随想录
视频链接LeetCode:70.爬楼梯
题目链接力扣题目链接
图释
class Solution {
public:// 确定dp数组dp table以及下标的含义 vectorint dp, dp[i]表示达到第n层楼梯需要的方法 // 确定递推公式 dp[i]dp[i-1]dp[i-2]// dp数组如何初始化 dp[1]1 dp[2]2// 确定遍历顺序 从前往后// 举例推导dp数组 // 题目中要求的每次可以爬1或者2个台阶也就是说最终到达n阶台阶有两种方式// 一个是爬1阶台阶到达对应的是从n-1阶台阶开始// 另一个就是爬2阶台阶到达对应的是从n-2阶台阶开始爬// 而爬n-1阶和n-2阶台阶的方法有dp[n-1]dp[n-2]个// 所以最终爬n阶台阶的方法种类就是dp[n-1]dp[n-2]int climbStairs(int n) {if(n1) return 1;if(n2) return 2;vectorint dp(n1);dp[1]1;dp[2]2;for(int i3; in; i){dp[i] dp[i-1]dp[i-2];}return dp[n];}
};
class Solution {
public:int climbStairs(int n) {if(n1) return 1;if(n2) return 2;return climbStairs(n-1)climbStairs(n-2);}
}; //超时题目746. 使用最小花费爬楼梯
文章链接代码随想录
视频链接LeetCode:746.使用最小花费爬楼梯
题目链接力扣题目链接
图释 class Solution {
public:// 确定dp数组dp table以及下标的含义 vectorint dp, dp[i]表示爬到第n层台阶的最低花费// 确定递推公式 dp[i] min(dp[i-1]cost[i-1], dp[i-2]cost[i2]) 可以选择从前一个台阶或者前两个台阶爬上来 // dp数组如何初始化 dp[0]0, dp[1]0 题目说了可以选择从0或者1台阶出发也就是dp[i]到这两个台阶的最低花费为0// 确定遍历顺序 从前往后// 举例推导dp数组 int minCostClimbingStairs(vectorint cost) {if(cost.size()0 || cost.size()1) return 0;vectorint dp(cost.size()1);dp[0]dp[1]0;for(int i2; icost.size(); i){ // 顶楼表示为dp[n] dp[i] min(dp[i-1]cost[i-1], dp[i-2]cost[i-2]);}return dp[cost.size()];}
};