Table of Contents generated with DocToc
- 动态规划
递归问题 -> 重叠子问题&最优子结构 > 记忆化搜索(自顶向下解决问题)
> 动态规划(自下向上解决问题)
- 五步曲
1 确定dp数组(dp table)以及下标的含义
2 确定递推公式
3 dp数组如何初始化
4 确定遍历顺序
5 举例推导dp数组
- 遍历顺序的重要性
1、01 背包问题中,一维数组需要将物品放到外层,背包容量放里层,且容量需要从大到小,才不会进行重复计算
2、完全背包问题中,计算排列和组合的循环里外层是不同的
组合
func change(amount int, coins []int) int {
res := make([]int, amount+1)
// res[j] amount = j 有多少种方式
res[0] = 1
for i := 0; i < len(coins); i++ { // 物品在外层
for j := coins[i]; j <= amount; j++ { // 容量在里层
res[j] += res[j-coins[i]]
}
//log.Println(res)
}
return res[amount]
}排列
func combinationSum4(nums []int, target int) int {
res := make([]int, target+1)
res[0] = 1
for j := 0; j <= target; j++ { // 背包容量在外层
for i := 0; i < len(nums); i++ { // 物品在里层
if j-nums[i] >= 0 {
res[j] += res[j-nums[i]]
}
}
//log.Println(res)
}
return res[target]
}- 做题记录
| 最近提交时间 | 题目 | 题目难度 | 提交次数 |
|---|---|---|---|
| 5 小时前 | #516 最长回文子序列 | 中等 | 1 次 |
| 6 小时前 | #647 回文子串 | 中等 | 1 次 |
| 6 小时前 | #72 编辑距离 | 困难 | 1 次 |
| 7 小时前 | #583 两个字符串的删除操作 | 中等 | 3 次 |
| 7 小时前 | #115 不同的子序列 | 困难 | 1 次 |
| 8 小时前 | #392 判断子序列 | 简单 | 2 次 |
| 9 小时前 | #53 最大子数组和 | 简单 | 8 次 |
| 9 小时前 | #1035 不相交的线 | 中等 | 2 次 |
| 10 小时前 | #1143 最长公共子序列 | 中等 | 2 次 |
| 1 天前 | #718 最长重复子数组 | 中等 | 1 次 |
| 1 天前 | #674 最长连续递增序列 | 简单 | 2 次 |
| 1 天前 | #300 最长递增子序列 | 中等 | 4 次 |
| 2 天前 | #714 买卖股票的最佳时机含手续费 | 中等 | 2 次 |
| 2 天前 | #309 最佳买卖股票时机含冷冻期 | 中等 | 2 次 |
| 2 天前 | #188 买卖股票的最佳时机 IV | 困难 | 3 次 |
| 2 天前 | #123 买卖股票的最佳时机 III | 困难 | 2 次 |
| 2 天前 | #122 买卖股票的最佳时机 II | 中等 | 6 次 |
| 2 天前 | #121 买卖股票的最佳时机 | 简单 | 2 次 |
| 3 天前 | #337 打家劫舍 III | 中等 | 4 次 |
| 3 天前 | #213 打家劫舍 II | 中等 | 2 次 |
| 3 天前 | #198 打家劫舍 | 中等 | 2 次 |
| 3 天前 | #139 单词拆分 | 中等 | 1 次 |
| 4 天前 | #279 完全平方数 | 中等 | 2 次 |
| 4 天前 | #322 零钱兑换 | 中等 | 3 次 |
| 4 天前 | #70 爬楼梯 | 简单 | 5 次 |
| 4 天前 | #377 组合总和 Ⅳ | 中等 | 1 次 |
| 5 天前 | #518 零钱兑换 II | 中等 | 1 次 |
| 5 天前 | #474 一和零 | 中等 | 1 次 |
| 5 天前 | #494 目标和 | 中等 | 1 次 |
| 6 天前 | #1049 最后一块石头的重量 II | 中等 | 3 次 |
| 6 天前 | #416 分割等和子集 | 中等 | 3 次 |
| 7 天前 | #96 不同的二叉搜索树 | 中等 | 1 次 |
| 7 天前 | #343 整数拆分 | 中等 | 5 次 |
| 7 天前 | #62 不同路径 | 中等 | 2 次 |
| 7 天前 | #63 不同路径 II | 中等 | 3 次 |
| 7 天前 | #746 使用最小花费爬楼梯 | 简单 | 2 次 |
| 8 天前 | #509 斐波那契数 | 简单 | 2 次 |