搜索-回溯法
搜索-回溯法
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
poj1321——棋盘问题
题目大意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,问摆放k个棋子的所有可行的摆放方案个数。输入:(多个case) 棋盘行列数n 棋子个数k(-1 -1表示结束,n<=8,k<=n) 棋盘第i行形状(#表示棋盘区域 .表示空白区域)输出:摆放...原创 2017-11-13 20:42:07 · 237 阅读 · 0 评论 -
leetcode51——N-Queens
题目大意:输出N皇后问题(行列对角线不能冲突)的所有解,每个解是一个字符串数组,第i个字符串代表棋盘中的第i行,'Q'代表放置皇后,'.'代表空。分析:dfs回溯。列出所有解的题目自然想到回溯法求解。用数组记录,i行的皇后放到了cols[i]列,来判断是否可以放置皇后。如何判断对角线是否冲突?想一想是不是:行号之差=列号之差说明在同一对角线上。代码:转载自https://blog.csdn.net...原创 2018-04-23 14:04:00 · 141 阅读 · 0 评论 -
leetcode22——Generate Parentheses
题目大意:给出小括号()的总对数,返回一个字符串数组,里面包括这些对的括号所能组成的所有合法字符串分析:回溯法的应用。又是一道列出所有组合的题,和leetcode17类似,递归求解。设剩余的左右括号数分别是left和right个。 1.如果left和right都为0就代表此时找到了一个合法的解,将它放入结果数组; 2.如果left>right,...原创 2018-04-09 22:13:21 · 118 阅读 · 0 评论 -
leetcode17——Letter Combinations of a Phone Number
题目大意:根据给出的手机数字键盘(2-9每个数字代表不同的一些字母),找出目标数字代表的所有字符串组合分析:回溯法。这种要求出全部组合的题,通常使用回溯法来穷举,当数据量过大时再考虑dp等等。代码:class Solution {public: string nums[10] = {"","","abc","def","ghi","jkl","mno","pqr...原创 2018-04-08 21:50:43 · 143 阅读 · 0 评论 -
leetcode95——Unique Binary Search Trees II
题目大意:用数字1~n构建出所有可能的二叉搜索树分析:dfs。和上道题类似,但是不用动规了,因为这道题要构建出具体的树,所以递归即可求解。以i为根,左子树由1~i-1构成,右子树由i+1~n构成,递归过程就是以范围内的每个数字做根,分别生成左右子树,然后将生成的所有左右子树组合起来与根成树后压入答案。代码:转载自https://blog.csdn.net/feliciafay/articl...原创 2018-06-20 17:09:01 · 120 阅读 · 0 评论 -
leetcode131——Palindrome Partitioning
题目大意:分割字符串,使得每个子串都是回文串,返回所有可能的分割方式代码:class Solution {public: vector<vector<string>> partition(string s) { vector<vector<string>> res; vector<string...原创 2020-02-20 11:58:26 · 82 阅读 · 0 评论 -
leetcode93——Restore IP Addresses
题目大意:给出一个数字组成的字符串,问他能恢复成多少种的ip地址,列举出来分析:回溯法。罗列想到回溯。递归结束条件就是字符串遍历结束并且生成四段,然后有个剪枝条件。接下来递归就分三种情况:每段有1个数字;每段有2个数字;每段有3个数字,根据三种情况处理细节判断即可。代码:转载自https://blog.csdn.net/u012501459/article/details/46804405clas...原创 2018-06-16 14:38:56 · 120 阅读 · 0 评论 -
leetcode39——Combination Sum
题目大意:在给出的数组中找出数字的组合(数字允许重复使用,找出的组合不能重复),使得他们相加得到目标数字分析:dfs。dfs层层搜索记录路径即可。代码:class Solution {public: vector<vector<int>> ans; vector<vector<int>> combinationSum(...原创 2018-04-17 16:25:25 · 134 阅读 · 0 评论 -
leetcode40——Combination Sum II
题目大意:在给出的数组中找出组合(数组中的数字不可以重复使用,组合不可以重复),使得组合中数字之和等于目标数字分析:dfs。和上一道的区别在于数组中的数字不能重复使用。那么就要注意dfs时下一层不能再加当前下标位的数字了,也就是说dfs的下标要加一。 还有一个区别就是这道题的数组中有重复数字存在,所以在dfs时处理过相同数字的第一个之后,在当前层就要跳过后续的几个相同数字...原创 2018-04-17 17:05:15 · 131 阅读 · 0 评论 -
leetcode77——Combinations
题目大意:求出1~n内k个数的所有增序排列组合分析:回溯法。罗列组合一看就是回溯法。注意中间辅助数组的压入弹出。代码:class Solution {public: vector<vector<int>> ans; vector<int> tmp; vector<vector<int>> combi...原创 2018-05-21 12:53:36 · 128 阅读 · 0 评论 -
leetcode491——Increasing Subsequences
题目大意:给出一个可以包含重复数字的整数数组,求出其中的所有升序子序列(长度不能小于2)分析:dfs。注意这道题不是求升序子集,是求原数组中的升序子序列,所以不能把数组sort后求解,否则答案就不符合题意了。由于有重复数字,如果不排序怎么去重呢?用一个set集合保存答案,就可以保证没有重复答案存在。新遇到的数字大于等于tmp数组的最后一位即可将它加入tmp数组。代码:转载自class...原创 2018-08-01 20:17:03 · 174 阅读 · 0 评论 -
leetcode90——Subsets II
题目大意:给出一个含有重复数字的数组,求出它的全部子集,要求不能有重复子集出现分析:回溯法。和leetcode78类似,但是这道题的数组中包含重复数字,要避免结果集中添加重复答案就需要在当前层避免选择重复数字。代码:class Solution {public: vector<vector<int>> ans; vector<vecto...原创 2018-06-12 18:39:11 · 165 阅读 · 0 评论 -
leetcode47——Permutations II
题目大意:将给出的数字(可能有重复数字)全排列,结果不能重复分析:回溯法。和上一题类似,不过这道题给出的数组中可能有重复数字,也就是说相同数字的第一个dfs过之后就要在同一层跳过其他个,否则会出现重复答案。代码:class Solution {public: vector<vector<int>> ans; vector<int>...原创 2018-04-19 17:07:56 · 172 阅读 · 0 评论