
回溯算法
leetcode回溯算法
why_1513
求实求真,大气大气
展开
-
解数独-力扣
【代码】解数独-力扣。原创 2024-06-18 17:01:36 · 297 阅读 · 0 评论 -
N皇后-力扣
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。原创 2024-06-18 16:13:54 · 1526 阅读 · 0 评论 -
重新安排行程-力扣
因此,只需要将机票数组遍历一遍,使用unordered_map<出发点,map<目的地,次数>>这样的数据结构来存储出发机场,和该机场的目的机场,以及次数;在之前的回溯题目中, backtracking函数的返回值类型都是void,此时应该用bool,因为只需要找到一条完整的路径,并非像之前的题目那样需要进行完整的遍历。在进行纵向遍历时,终止条件是:我们回溯遍历的过程中,遇到的机场个数,如果达到了(航班数量+1),那么我们就找到了一个行程,把所有航班串在一起了。原创 2024-06-18 15:20:36 · 226 阅读 · 0 评论 -
全排列Ⅱ-力扣
本题和全排列的区别在于数组中存在重复元素,则在横向遍历时,使用哈希表来记录已经作为排序首元素的元素,当某个元素重复出现时,跳过即可。原创 2024-06-17 21:15:04 · 386 阅读 · 0 评论 -
全排列-力扣
排列问题与组合问题的区别在于,排列问题需要排列是有序的,相同的元素,不同的顺序,在排列中算不同的答案。因此递归函数的 startIndex 是没有必要的。那么在纵向遍历中,怎么跳过之前已经选中的元素呢,这就需要一个哈希表来完成,哈希表的大小应当与nums的大小是一样的。返回条件当然是 vec.size() == nums.size(),此时vec中才排列好了nums中的所有元素。原创 2024-06-17 21:05:54 · 161 阅读 · 0 评论 -
非递减子序列-力扣
本题与子集Ⅱ的区别在于不能对原数组进行排序的,需要对横向遍历增加去重操作,使用哈希表来存储使用过的元素,当后续出现重复的元素,则跳过。原创 2024-06-17 20:48:53 · 298 阅读 · 0 评论 -
子集Ⅱ-力扣
本题和 子集 的区别在于,集合中的元素可能存在重复的,那么就需要对结果进行去重,首先对数组进行排序,然后当横向遍历时,对重复元素进行去重。原创 2024-06-17 16:39:33 · 152 阅读 · 0 评论 -
子集-力扣
本题与分割问题相比,是要将所有的遍历结果都添加到返回数组中,因此就不能只在终止时,才将vec添加到result中,纵向递归时,vec每添加一个元素,就将一个结果加入到result。给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。原创 2024-06-17 16:21:15 · 316 阅读 · 0 评论 -
复原IP地址-力扣
看到题目时,我在思考,需要一个变量来记录每一步切的位数,如果切的位数超过3,那也是要停止的,但代码随想录没有这么做,他在将ip地址分为四个部分,去判断一个部分是否满足Ip地址的条件,不去管切割的字符串是1位2位还是3位4位,只要字符串的值超过255,那么他就不符合。这道题看了半天没什么思路,参考了代码随想录。使用一个breakpoint来记录插入的 ‘.’ 的数量,当breakpoint为3时,便是中止条件,此时判断最后一部分的字符串是否满足有效IP地址。如果满足,则说明是一个正确结果。原创 2024-06-16 20:15:37 · 257 阅读 · 0 评论 -
分割回文串-力扣
组合问题:选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中再选取第三个…切割问题:切割一个a之后,在bcdef中再去切割第二段,切割b之后在cdef中再切割第三段…原创 2024-06-16 19:25:18 · 213 阅读 · 0 评论 -
组合总和Ⅱ-力扣
本题数组 candidates 的元素是有重复的,而 组合总和 是无重复元素的数组candidates。本题和 组合总和 的区别在于,本题 candidates 中的每个数字在每个组合中只能使用一次。因此需要对 组合总和 的代码增加剪枝操作,来对结果进行去重。原创 2024-06-16 15:16:18 · 161 阅读 · 0 评论 -
组合总和-力扣
递归的返回条件应当是 sum > target 或者 sum == target,在 sum == target时,将此时的 vec 添加到result数组中。本题的关键点在于组合中元素能够重合,那么在递归时,传入的 起始位置 就不必再加 1 ,但是也能不能没有起始位置,都从0开始。因为都从0开始,则会产生重复的结果。原创 2024-06-16 14:30:41 · 247 阅读 · 0 评论 -
电话号码的字母组合-力扣
这道题最开始的想法是,先读取给定字符串的每个每个,将数字对应的字符添加到一个字符串上,然后这个问题就转化成给的一个字符串,然后求组合的问题。但是在细细读过题后,发现题目并不是这个意思,题目是要求每个数字对应字母的组合,即,每个数字代表的字母在一个结果中只出现一个。那么解题的思路就明确了。原创 2024-06-16 13:36:43 · 325 阅读 · 0 评论 -
组合总和Ⅲ-力扣
本题和组合类似,只不过多加了一步求和,并将数组的范围定在了 [ 1, 9 ]。原创 2024-06-15 12:52:44 · 104 阅读 · 0 评论 -
组合-力扣
通过递归来模拟,第一层选定第一个元素,第二层选定第二个元素,这样n就相当于一棵树的宽度,而k就相当于树的深度。当存储元素的数组的大小达到k时,说明到达了这棵树的叶子节点,此时终止递归,进行返回。这道题涉及到回溯的知识,如果使用for循环进行暴力搜索,那么需要去写k层的for循环,才能暴力搜索出结果,显而是不现实的。原创 2024-06-13 22:58:18 · 223 阅读 · 0 评论