![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
解题思想-搜索
解题思想-搜索
overlordmax
这个作者很懒,什么都没留下…
展开
-
216. 组合总和 III
1.题目描述找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:1.所有数字都是正整数。2.解集不能包含重复的组合。示例 1:示例 2:2.思路传递的时候我们把当前节点的值加入到一个集合中,并且用n减去当前节点的值,返回的时候再把它给移除掉。那么终止条件是什么呢,就是集合中的size等于k,并且n等于0,因为不能有重复的集合以及集合中不能有重复的数字,所以这里的i不能从0开始,要从上一个选择之后的下一个值开始即i+1。原创 2020-09-12 19:43:04 · 136 阅读 · 0 评论 -
40. 组合总和 II
1.题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:1.所有数字(包括目标数)都是正整数。2.解集不能包含重复的组合。示例 1:示例 2:2.回溯法为了避免重复,首先我们可以先排一下序,排序的目的就是为了避免紧挨着两个相同的元素被重复使用,然后当前使用过的元素下一次就不能使用了,所以回溯的时候要i+1从下一个位置开始,避免重原创 2020-09-12 19:26:25 · 80 阅读 · 0 评论 -
131. 分割回文串
1.题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:2.思路对于这题要采用分割的思想,其核心也是回溯法,一条路走到底再回退。如图所示:每次调用backTrack函数就行一次分割,直到分割线处于最后一个元素之后将当前path压入集合。每次添加一条分割线,用ps记录下一次分割的起始位置,记得每次判断当前分割下来的字符串是否属于回文3.代码class Solution {public: vector<vector&原创 2020-09-09 17:38:47 · 112 阅读 · 0 评论 -
130. 被围绕的区域
1.题目描述给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:运行你的函数后,矩阵变为:解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。2.思路任何与边界上的 O 相连的 O (包括边界上的O)都不会被填充为 X,原创 2020-09-09 17:01:28 · 223 阅读 · 0 评论 -
77. 组合
1.题目描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:2.回溯法比如输入 n = 4, k = 2,输出如下结果,顺序无所谓,但是不能包含重复(按照组合的定义,[1,2] 和 [2,1] 也算重复):[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]k 限制了树的高度,n 限制了树的宽度3.代码class Solution {public: vector<vector<int>>原创 2020-09-03 17:27:31 · 272 阅读 · 0 评论 -
46. 全排列
1.题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:2.回溯法1.求出所有可能出现在第一个位置的元素,即把第一个元素和后面所有元素交换2.固定第一个元素,求后面所有元素的排列3.固定前两个元素…4.然后递归地处理后面的元素5.回溯的时候要交换回元素3.代码class Solution {public: vector<vector<int>> permute(vector<int>& nums) {原创 2020-09-03 17:00:26 · 85 阅读 · 0 评论 -
78. 子集
1.题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:2.思路回溯模板:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择结果就是树上的所有节点:原创 2020-09-03 16:06:48 · 74 阅读 · 0 评论 -
39. 组合总和
39. 组合总和1.题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:1.所有数字(包括 target)都是正整数。2.解集不能包含重复的组合。示例 1:示例 2:2.思路(回溯法)回溯算法框架。解决一个回溯...原创 2020-03-08 23:18:53 · 61 阅读 · 0 评论 -
207. 课程表
207. 课程表1.题目描述现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:示例 2:说明:1.输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法。2...原创 2020-03-02 22:42:36 · 209 阅读 · 0 评论 -
279. 完全平方数
279. 完全平方数1.题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:示例 2:2.思路(BFS) 可以将每个整数看成图中的一个节点,如果两个整数之差为一个平方数,那么这两个整数所在的节点就有一条边,如下图所示: 采用广度优先遍历,顺序遍历每一层,当节点差出现0时,此时...原创 2020-02-29 10:47:18 · 211 阅读 · 0 评论 -
1091. 二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径1.题目描述 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成: 相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值...原创 2020-02-28 11:52:31 · 299 阅读 · 0 评论 -
广度优先遍历和深度优先遍历
1.BFS 广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。如上图所示:第一层: 0 -> {6,2,1,5}第二层: 6 -> {4} 2 -> {} 1 -> {} 5 -> {3}第三层: 4 -> {} 3 ->...原创 2020-02-28 11:42:03 · 708 阅读 · 0 评论