Backtracking
文章平均质量分 61
我为老师建博客
这个作者很懒,什么都没留下…
展开
-
39. Combination Sum Medium
这道题是回溯法的简单应用,因为之前做八皇后问题的时候已经研究了一波回溯法,所以这道题写起来也很得心应手,很快就AC了。主要还是套用回溯法的模版,具体到这题就是,每次迭代遍历待选参数,从大于等于上一个待选元素的位置直到等于target的元素的位置,这些都是本轮迭代可选的元素。如果小于target,就添加新元素后继续迭代,如果等于target,直接加入结果。因为我们保证了每次选择不从 比之前选过的元素原创 2017-04-20 16:30:45 · 179 阅读 · 0 评论 -
40. Combination Sum II Medium
上一题的加强版,主要思路类似,建议与上一题同时食用。。。这题题目的变化是,数组不再有序,同时有了重复的数字出现,但不允许多次取同一个值,这就稍微有点麻烦。二话不说先排序,方便后续操作。这里需要满足的要求有两个:首先,每一次迭代,在遍历候选元素的时候,同一位置的元素如果上一次迭代已经选过,这次不能选。其次,每一次迭代,相同元素,只能选择一个继续迭代,否则会有重复结果产生,例如数组中有连续3个2出原创 2017-04-22 13:38:43 · 282 阅读 · 0 评论 -
51. N-Queens Hard
经典的八皇后问题,主要考查回溯法。参考前面一篇转载别人的结束回溯法的文章,里面的模版很规范很实用。这里提供两种解法。主要思想都是从矩阵的第0行开始,每一行从左开始尝试摆一个棋子,然后看这个位置是否合适,如果合适,则将这个矩阵递归下去;如果不合适,则看下一个位置,直到这一行的位置都被尝试过。函数持续递归调用到第n行,就把结果添加到答案中。第一种代码如下:class Solution {p原创 2017-04-17 22:48:01 · 263 阅读 · 0 评论 -
52. N-Queens II Hard
跟上一题做法一样,这里不在求所有的答案,而是要答案的个数,所以只需要在上一题的基础上稍加修改,加一个count来计数就可以。class Solution {public:int count; int totalNQueens(int n) { count = 0; vector matrix(n, string(n, '.'));原创 2017-04-17 22:51:31 · 150 阅读 · 0 评论 -
回溯全解
资料来源 https://segmentfault.com/a/1190000006121957 谢谢这位大佬~记在这里当笔记了回溯是啥用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另转载 2017-03-27 23:05:29 · 911 阅读 · 2 评论 -
46. Permutations (list)
求一组不重复数的所有排列,用回溯法来遍历,不过这种回溯不需要回头。大概思路就是用一个递归函数,每次选择一个之前没选过的数加入到当前list中,最后如果选完了所有的数,加入到结果中。算法并不难,主要是语法上遇到一些问题,比如关于list的使用。总结:1. list > 这种二维的list,声明的时候还是和一维一样results = new ArrayList2.将一个list原创 2017-09-08 10:47:12 · 270 阅读 · 0 评论 -
47. Permutations II
这道题是上一题的进阶,这次数组中可能有重复的数,导致排列的结果会有重复。那么怎么解决重复的问题呢?仔细想一想,重复是因为:要排列N个数,每次迭代排一个,总共N次迭代。如果在某一个位置上,我选了数X(X1),而X不只有一个,后面某个位置我选了另一个X(X2),这是情况1。如果我在第一次的位置上选了X2,在后面的那个位置上选X1,就跟情况1重复了。真正的原因是我们在同一个位置上,选了两原创 2017-09-09 13:09:52 · 178 阅读 · 0 评论