
动态规划
文章平均质量分 81
动态规划算法题
咕噜咕噜day
day day up!
展开
-
leedcode518:完全背包,零钱兑换,python逐行注解
题目: 代码: class Solution: def change(self, amount: int, coins: List[int]) -> int: # 比如是只有两个硬币面值,并且两个硬币的数量是无限的,当无限取硬币时,转移方程:pro[n] += proi[n-coin[i]] 为什么是+=, 因为比如你使用面值为1时的组合方案在计算使用面值为2的方案时,应该是初始值; # 时间复杂度:O(amount*coins_n) .原创 2020-11-07 02:20:59 · 300 阅读 · 1 评论 -
leedcode70:爬楼梯(空间O(1),O(n))
class Solution: def climbStairs(self, n: int) -> int: # 子问题:sub(n) = sub(n-1) + sub(n-2) # 初始状态:dp[1] = 1, dp[2]=2 # 状态转移方程:dp[n] = dp(n-1) + dp(n-2) # # 法一用字典存储,空间复杂度是O(n),时间复杂度也是O(n) # dp = {} # dp.原创 2020-11-07 01:00:59 · 175 阅读 · 0 评论 -
剑指offer【62】:约瑟夫环问题,例子+递推
题目: 思路+代码: 举例: 序号递推关系: 思路: 约瑟夫环,首先理解,最终留下的数字在每轮删掉一个数剩下数组中都存在,只是索引不同; 然后知道只剩一个数时索引一定为0,比如 F(8,3) 可以由 F(7,3)推出; f(n,m) = (f(n-1, m) + m) % n class Solution: # 思路: # 约瑟夫环,首先理解,最终留下的数字在每轮删掉一个数剩下数组中都存在,只是索引不同; # 然后知道只剩一个数时索引一定为0,比如 F(8,3) 可原创 2020-07-29 14:12:05 · 788 阅读 · 0 评论 -
剑指offer【60】:n个骰子得点数取值
题目: 思路+代码: 思路: 动态规划,总可能出现情况6n 初始状态:n=1, 1,2,3,4,5,6;六种情况 转移方程:第n次掷色子后的s值,F(n,s) = F(n-1,s-1)+F(n-1,s-2)+F(n-1,s-3)+F(n-1,s-4)+F(n-1,s-5)+F(n-1,s-6); 返回:第n次后,出现各值得情况次数 * 1/(6n) 时间复杂度:O(n2) 空间复杂度:O(n2); 初始化一个n*(6n)的0数组 class Solution: def twoSum(self, n原创 2020-07-29 10:43:13 · 216 阅读 · 0 评论