代码随想录算法训练营第三十二天 | 动规

47 阅读1分钟

LeetCode 509. 斐波那契数

📖 考察点

动规

📖 题意理解

💡 解题思路

/**

  • 五部曲
  • 1.dp数组每一项为n对应斐波那契数
  • 2.递推公式为 dp[n] = dp[n-1]+dp[n-2]
  • 3.初始化为dp[0] = 0 dp[1] = 1
  • 4.便历顺序为从小到大
  • 5.举例0,1,1,2,3,5,8 */

💻 代码实现

JavaScript

var fib = function (n) {
	if (n === 0) return 0;
	if (n === 1) return 1;
	let pre = 0;
	let cur = 1;
	for (let i = 2; i <= n; i++) {
		let temp = cur;
		cur = cur + pre;
		pre = temp;
	}
	return cur;
};


LeetCode 70. 爬楼梯

📖 考察点

动规

📖 题意理解

💡 解题思路

/**

  • 1.dp[i] 代表 跳到第i层有dp[i]种不同的方法
  • 2.递推公式,dp[i]可以 从dp[i-1]跳一层上来或者从dp[i-2]跳2层上来
  • 3.初始化dp[0] = 1;dp[1] = 1;dp[2] = 2;
  • 4.从小到大便历
  • 5.举例1,1,2,3,5 */

💻 代码实现

JavaScript

var climbStairs = function (n) {
	if (n === 0) return 1;
	if (n === 1) return 1;
	let pre = 1;
	let cur = 1;
	for (let i = 2; i <= n; i++) {
		let temp = cur;
		cur = cur + pre;
		pre = temp;
	}
	return cur;
};


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

📖 考察点

动规

📖 题意理解

💡 解题思路

/**

  • 五部曲
  • dp[i] 为到达第i层所需要的最小花费
  • 到达第i层的路径为dp[i-1]+cost[i-1] || dp[i-2]+cost[i-2] 取最小值,所以递推公式为dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
  • 初始化dp[0] = 0,dp[1] = 0; 可以直接到达;
  • 从小到大便历
  • 举例
  • cost = [10,15,20]
  • dp = [0,0,10,15]; */

💻 代码实现

JavaScript

var minCostClimbingStairs = function (cost) {
	let pre = 0;
	let cur = 0;
	for (let i = 2; i <= cost.length; i++) {
		let temp = cur;
		cur = Math.min(cur + cost[i - 1], pre + cost[i - 2]);
		pre = temp;
	}
	return cur;
};