
回溯
KroneX
ACM退役选手,热爱优雅、高效、有创造力的技术,本博客记录题解,编程tips,计算机相关知识,心得等。
展开
-
【leetcode】131. 分割回文串(palindrome-partitioning)(回溯)[中等]
链接https://leetcode-cn.com/problems/palindrome-partitioning/耗时解题:24 min题解:35 min题意给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。思路以位置 0 为子串首字符,每找到一个回文串,把这个回文串加入划分数组,再以这个子串的下一个位置到原字符串的结尾作为新的字符串(重复子问题)进行上述过程,当子串的下一个位置是原字符串的结尾,将划分数组加入结果。回溯回来的时候,从划分数原创 2021-03-07 10:35:56 · 222 阅读 · 0 评论 -
【leetcode】140. 单词拆分 II(word-break-ii)(DP)[困难]
链接https://leetcode-cn.com/problems/word-break-ii/耗时解题:4 h 10 min题解:42 min题意给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。思路DP 求解的数量(可能的句子的数量),并记录解在字典中的位置,然后回溯找到每个解。DP: sum[原创 2020-11-01 17:48:29 · 159 阅读 · 0 评论 -
【leetcode】52. N皇后 II(n-queens-ii)(回溯)[困难]
链接https://leetcode-cn.com/problems/n-queens-ii/耗时解题:35 min题解:7 min题意n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。思路根据题意,每行每列只能放一个。所以 dfs 每行,找每 行 可以放的 列,对于每一列所确定的位置,都检查当前位置是否安全(横竖斜都不在攻击范围内),如果安全则选定这个位置,dfs 下一行,直到 dfs 到第 n 行,说明当前的放法就可行,结果+1。时间复杂度原创 2020-10-17 14:08:13 · 188 阅读 · 0 评论 -
【leetcode】538. 把二叉搜索树转换为累加树(convert-bst-to-greater-tree)(回溯)[简单]
链接https://leetcode-cn.com/problems/convert-bst-to-greater-tree/耗时解题:10 min题解:14 min题意给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Sum Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。注意: 本题和 1038. 从二叉搜索树到更大和树 相同,代码只需需改函数名即可 AC ????思路根据二叉搜索树的性质,当前节点有且只有它的右子树上原创 2020-09-21 08:48:34 · 139 阅读 · 0 评论 -
【leetcode】47. 全排列 II(permutations-ii)(回溯)[中等]
链接https://leetcode-cn.com/problems/permutations-ii/耗时解题:24 min题解:17 min题意给定一个可包含重复数字的序列,返回所有不重复的全排列。思路是 【leetcode】46. 全排列(permutations)(回溯)[中等] 这道题的变型。比它复杂了一点,nums 中可以存在重复数字了,那这就需要去重。其实在上题的基础上只需要加两行代码,首先需要把重复的元素聚在一起,排序即可,这是第一行;然后如果当前搜索完的元素与之后想尝试放在这原创 2020-09-18 21:04:17 · 172 阅读 · 0 评论 -
【leetcode】46. 全排列(permutations)(回溯)[中等]
链接https://leetcode-cn.com/problems/permutations/耗时解题:9 min题解:16 min题意给定一个 没有重复 数字的序列,返回其所有可能的全排列。思路设置一个 vis 数组,把已经排进去的元素标为 true,每次 dfs 从头找还没排进去的元素,找到即作为当前位置排进序列。当 序列的长度 等于 nums 的长度 时,将这个序列加入结果。时间复杂度:O(n∗n!)O(n*n!)O(n∗n!)AC代码class Solution {priv原创 2020-09-18 20:46:48 · 181 阅读 · 0 评论 -
【leetcode】37. 解数独(sudoku-solver)(回溯)[困难]
链接https://leetcode-cn.com/problems/sudoku-solver/耗时解题:2 h 30 min题解:14 min题意编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’原创 2020-09-15 17:40:56 · 188 阅读 · 0 评论 -
【leetcode】79. 单词搜索(word-search)(回溯)[中等]
链接https://leetcode-cn.com/problems/word-search/耗时解题:50 min题解:6 min题意给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。思路遍历二维网格,找 网格中字母 与 单词第一个字母相同 的位置,从这样的位置开始 dfs 找单词中剩下的字母,看能否通过 上下左右 寻找到全部。时间复杂度:原创 2020-09-13 19:21:15 · 162 阅读 · 0 评论 -
【leetcode】216. 组合总和 III(combination-sum-iii)(回溯)[中等]
链接https://leetcode-cn.com/problems/combination-sum-iii/耗时解题:38 min题解:5 min题意找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。思路是这个 【leetcode】39. 组合总和(combination-sum)(回溯)[中等] 的变型。相当于 candidates = {1, 2, 3, 4原创 2020-09-11 19:44:52 · 161 阅读 · 0 评论 -
【leetcode】40. 组合总和 II(combination-sum-ii)(回溯)[中等]
链接https://leetcode-cn.com/problems/combination-sum-ii/耗时解题:26 min题解:18 min题意给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。思路是这个 【leetcode】39. 组合总和(combinatio原创 2020-09-10 13:18:48 · 135 阅读 · 0 评论 -
【leetcode】39. 组合总和(combination-sum)(回溯)[中等]
链接https://leetcode-cn.com/problems/combination-sum/耗时解题:? min (下次补上)题解:10 min题意给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。思路很是撒比,之前会做的题,现在不会去重,用了set原创 2020-09-10 10:59:27 · 206 阅读 · 0 评论 -
【leetcode】77. 组合(combinations)(回溯)[中等]
链接https://leetcode-cn.com/problems/combinations/耗时解题:13 min题解:5 min题意给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。思路按顺序枚举,当暂存vector内元素数量为 k 时加入结果。时间复杂度:O(Cnk)O(C_n^k)O(Cnk)AC代码class Solution {private: vector<vector<int>> ans; int n原创 2020-09-08 14:36:20 · 188 阅读 · 0 评论