![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode backtracking
文章平均质量分 72
Leetcode backtracking(回溯法)题目
努利!奋斗!
这个作者很懒,什么都没留下…
展开
-
leetcode 2305. Fair Distribution of Cookies
leetcode原创 2022-06-23 12:50:14 · 547 阅读 · 0 评论 -
Leetcode 472. Concatenated Words
题目解法:利用word break解法即可注意:c++在写的时候,这个参数一定要传引用,不然会占据很大的时间,比如下面的unordered_map<string,bool> &d,如果不传引用会tle像这边的d可以直接用unordered_set, unordered_set s(words.begin(), words.end());class Solution {public: bool canBreak(string s,unordered_map<原创 2022-05-05 12:20:45 · 707 阅读 · 0 评论 -
Leetcode 78. Subsets (python+cpp)
题目解法:对应combination无重复,只是添加到答案的条件不需要长度跟原数组一样罢了。关于permutation和combination,参考这里python版本class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: def dfs(sub,level): ans.append(sub[:]) if level == len(nu原创 2021-01-10 05:24:37 · 163 阅读 · 0 评论 -
Leetcode wordbreak类型的序列问题
题目1:139. Word Break解法1:暴力backtrackingclass Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: def backtracking(start): nonlocal ans if start == len(s): ans = True原创 2020-12-05 05:48:25 · 211 阅读 · 0 评论 -
Leetcode 1457. Pseudo-Palindromic Paths in a Binary Tree (python)
题目解法1:利用backtracking生成每条根节点到叶结点的路径,在利用字典注意判断。一条路径的permutaion要可以回文的条件是奇数个的数字个数只能是0或1class Solution: def pseudoPalindromicPaths (self, root: TreeNode) -> int: def dfs(node,path): if not node: return原创 2020-11-19 11:01:59 · 254 阅读 · 0 评论 -
Leetcode 17. Letter Combinations of a Phone Number(python+cpp)
Leetcode 17. Letter Combinations of a Phone Number题目解析题目解析这题实际上是一个无重复combination的模板题,只需要对1做一下特殊处理即可关于combination和permutation的总结,看这里:代码:class Solution: def letterCombinations(self, digits: str) -> List[str]: def backtracking(comb,level原创 2020-10-13 06:37:16 · 330 阅读 · 0 评论 -
Leetcode 1593. Split a String Into the Max Number of Unique Substrings(python)
Leetcode 1593. Split a String Into the Max Number of Unique Substrings题目解法:暴力backtracking题目解法:暴力backtracking因为要unique,所以dp不太做得了class Solution: def maxUniqueSplit(self, s: str) -> int: def backtracking(ind): nonlocal ans原创 2020-10-12 07:50:58 · 224 阅读 · 0 评论 -
Leetcode 351. Android Unlock Patterns (python)
Leetcode 351. Android Unlock Patterns题目解法:backtracking题目解法:backtracking这道题读懂题意挺关键。题目的意思是,从一个位置到另一个位置有两种情况,一种情况是到上下左右或者四个对角相邻的位置,另一种情况通过相邻且已经被访问过的位置到另一个不相邻的位置主要思想就是铜鼓obacktracking来访问所有可能的解法。为啥是backtracking呢,因为对于解法的长度有一个范围,也就是当前一种解法成立的时候,继续扩展下去还有可能形成新的解原创 2020-10-04 08:04:02 · 605 阅读 · 1 评论 -
Leetcode 140. Word Break II (python+cpp)
Leetcode 140. Word Break II题目解法1:动态规划+暴力递归解法2:recursion+memorization总结题目解法1:动态规划+暴力递归首先用word break I的方法来判断是否能够拆分能拆分之后,暴力recursion解出所有答案class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> List[str]: def check(s):原创 2020-09-30 09:46:13 · 431 阅读 · 0 评论 -
Leetcode 290. Word Pattern & 291. Word Pattern II (python)
Leetcode 290. Word Pattern & 291. Word Pattern IIword pattern题目解法:双hashmapword pattern II题目:解法:双hashmap+backtrackingword pattern题目解法:双hashmap判断他们是否matching的关键在于,pattern中的某个字母和s中的单词是不是双向1-1对应的。要表达这种双向1-1对应的关系可以用两个字典,每个字典表示一种映射方向class Solution:原创 2020-09-14 08:26:52 · 661 阅读 · 0 评论 -
Leetcode 465. Optimal Account Balancing (python+cpp)
Leetcode 465. Optimal Account Balancing题目解析:题目解析:这个题目手下需要进行一些预处理,这一系列的转账可以被全部简化成每个账户进行这些转账之后最后需要支出或者收入多少钱。这个问题有许多的解法,但是我个人认为比较make sense的一种就是利用backtracking枚举所有可能的方式。具体如下:从第一个账户开始,我们现在的目标是,清空第一个账户,那么就意味着可以将第一个账户的余额加到后面任意一个非0切正负与第一个账户余额相反的账户上然后进行下一层d原创 2020-09-09 13:12:16 · 874 阅读 · 0 评论 -
Leetcode permutaion and combination 总结
Leetcode permutation 和combination总结题目1:无重复元素permutation解析:题目2:有重复的permutation解析题目3:无重复的combination题目4:有重复元素的combination题目1:无重复元素permutation解析:对于无重复的permutation可以当成一个模板记住python代码如下:class Solution: def permute(self, nums: List[int]) -> List[List原创 2020-07-28 10:47:28 · 280 阅读 · 0 评论 -
Leetcode 51. N-Queens (python+cpp)
Leetcode 51. N-Queens题目解析题目解析这道题本质上和79 word search是一样的。同样是修改状态矩阵来进行回溯,只不过进行recursion的每一步需要对行,列以及两条对角线分别进行检查。我们可以通过遍历行,对列进行recursion,或者是遍历列,对行进行recursion都可以。所以需要的状态矩阵就是行或列状态矩阵,以及两个对角线状态矩阵。关键的一点是对与...原创 2020-05-04 02:56:12 · 177 阅读 · 0 评论 -
Leetcode 77. Combinations (python+cpp)
@[TOC](Leetcode 77. Combinations (python+cpp))题目解析这道题目和46可以放在一起看。46是排列,而这题是组合,区别就在于组合不考虑位置,而排列会考虑位置。对比一下唯一的区别在于,当进行递归的时候,排列传进去的是当前所在level+1的位置,而组合传进去的应该是当前遍历的i+1,结合两题的代码就很好懂了。举个例子,传i+1的话,n = 4, k ...原创 2020-04-26 11:24:16 · 368 阅读 · 2 评论 -
Leetcode 46. Permutations(python+cpp)
Leetcode 46. Permutations题目解析题目解析这道题应该可以作为回溯法入门最好的讲解例子了,下面引用一段看到的比较好的回溯讲解:回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状 态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。 顾名思义,回溯法的核心是回溯。在搜索到某一节点的时候,如果我们发现目前的节...原创 2020-04-25 12:34:34 · 324 阅读 · 0 评论