摘要: 37、解数独 基本思路: 回溯算法、把所有情况试一遍 需要填入数字的格,去掉不可能的数字,每一个可能的数字都要试 具体实现: 1、当填写第i行,第j列的元素时,需要知道其对应的行,列,块中,1-9数字的使用情况,从而选用不同的数字 新建row = [set(range(1, 10)) for _ i 阅读全文
posted @ 2021-04-03 15:19 最近饭吃的很多 阅读(200) 评论(0) 推荐(0)
摘要: 78、子集 基本思想: 回溯算法 具体实现: 这道题没有if判断递归是否结束 因为这个是每递归一下就加入到结果数组中, 代码: class Solution { List<List<Integer>> result = new ArrayList<>(); LinkedList<Integer> p 阅读全文
posted @ 2021-03-31 16:27 最近饭吃的很多 阅读(145) 评论(0) 推荐(0)
摘要: 46、全排列 基本思想: 回溯算法 具体实现: 与组合问题的不同,不在for循环中使用stratindex 因为全排列问题每次都要从头搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。 但是路径中出现过的数字,就不要再添加进来了 代码: class Solution { 阅读全文
posted @ 2021-03-28 09:15 最近饭吃的很多 阅读(127) 评论(0) 推荐(0)
摘要: 198、打家劫舍 基本思想: 动态规划 具体实现: 1、确认状态 dp[i]=前 i 个房子在满足条件下的能偷窃到的最高金额。 2、状态转移 由于不可以在相邻的房屋闯入,所以在当前位置 i 房屋可盗窃的最大值, 要么就是 i-1 房屋可盗窃的最大值, 要么就是 i-2 房屋可盗窃的最大值加上当前房屋 阅读全文
posted @ 2021-03-24 11:23 最近饭吃的很多 阅读(94) 评论(0) 推荐(0)
摘要: 416、分割等和子集 基本思想: 动态规划-01背包--一个商品只能放一次 背包的体积为sum/2 背包要放入的商品(集合里的元素)重量为元素的数值,价值也为元素的数值 背包如果正好装满,说明找到了总和为sum/2的子集 背包中每一个元素是不可重复放入 具体实现: 1、确定dp数组以及下标的含义 0 阅读全文
posted @ 2021-03-21 10:42 最近饭吃的很多 阅读(137) 评论(0) 推荐(0)
摘要: 312、戳气球问题 基本思想: 动态规划 具体实现: 1、确认状态 最后一步 dp[i][j]=x,戳破气球i和气球j之间的所有气球(不包括i和j),可以获得的最高分数为x。 设两个虚拟气球,气球0和气球n+1 子问题 最后一个被戳破的气球为k,子问题就是dp[i][k],dp[k][j] 2、状态 阅读全文
posted @ 2021-03-20 10:00 最近饭吃的很多 阅读(147) 评论(0) 推荐(0)
摘要: 887、高楼扔鸡蛋 第一种解法:二分搜索+动态规划 具体实现: 1.定义函数dp(k,n) 当前状态下为k个鸡蛋,面对n层楼,返回这个状态下最少的扔鸡蛋次数 2.选择在第i层楼扔,出现两种情况 (1)鸡蛋碎了 ,鸡蛋个数-1,往下面的楼找,dp(k-1,i-1),随着i增大,函数增大,单调递增 (2 阅读全文
posted @ 2021-03-19 11:51 最近饭吃的很多 阅读(174) 评论(0) 推荐(0)
摘要: 10、正则表达式 基本思想: 动态规划 具体实现: 1.确认状态: 最后一步 dp[i][j],代表s[0:i]和p[0:j]是否匹配 dp里面的i和j是s和p的长度 子问题 dp[i-1][j-1],dp[i][j-2],dp[i-1][j-2],dp[i-1][j] 2、状态转移公式: 3、初始 阅读全文
posted @ 2021-03-16 16:08 最近饭吃的很多 阅读(167) 评论(0) 推荐(0)
摘要: 516、最长回文子序列 基本思想: 动态规划运用二维dp数组 具体实现: 1、确定状态: (1)最后一步 字符串s[i:j]中的最长回文子序列的长度 (2)子问题 2、转移方程 (1)s[i]==s[j] 把字符串左右同时缩小一下+2,上图情况1 +2 (2)s[i]!=s[j] 不相等的话说明这两 阅读全文
posted @ 2021-03-14 15:11 最近饭吃的很多 阅读(103) 评论(0) 推荐(0)
摘要: 53、最大子数组问题 基本思想: 动态规划 具体实现: 1、确定状态 (1)最后一步 以nums[i]结尾的“最大子数组和” (2)子问题 以nums[i-1]结尾的“最大子数组和” 知道了nums列表中以每一个数字结尾的最大子数组和,找出其中最大的就可以了 2、转移方程 dp[i]=max(num 阅读全文
posted @ 2021-03-13 11:12 最近饭吃的很多 阅读(119) 评论(0) 推荐(0)