![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
回溯算法
文章平均质量分 53
我只是一只自动小青蛙
这个作者很懒,什么都没留下…
展开
-
回溯算法(六):N皇后问题
51. N 皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。一、解题思路首先我们写一个函数,来判定在某个格子上放置皇后是否合法对于棋盘,按层向下每层放置一个皇后如果能够放到最后,就可以得到一个可行解其实这就是一个回溯问题,只不过路径选择的合法性更复杂一些二、代原创 2021-06-26 13:36:37 · 909 阅读 · 0 评论 -
回溯问题(四):子集问题
78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。子集问题的特点组合问题与分割问题是将递归到最底层的路径作为结果子集问题的特点是需要将递归路上的全部路径作为结果因此,对于子集问题,我们对结果的记录发生在每次递归的最开始,而不是终止条件内2、代码实现class Solution {private: vector<vector<int>> res原创 2021-06-25 22:41:01 · 106 阅读 · 1 评论 -
回溯问题(三):切割问题
131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。1、切割问题抽象化因此,切割问题中需要递归传递的也只有一个参数:当前应该从哪里继续切割2、代码实现class Solution { vector<vector<string>> res; vector<string> path; /-----递归函数-----/ v原创 2021-06-25 21:36:10 · 521 阅读 · 0 评论 -
回溯问题(二):组合和问题及回溯问题的横向去重和纵向去重
组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。1、问题抽象与代码实现1)问题抽象2)代码实现class Solution {private: vector<vector<int>> result; vector<int> path; void backtracki..原创 2021-06-25 15:48:03 · 316 阅读 · 1 评论 -
回溯算法(一):组合问题
77.组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。这就是个暴力搜索的问题,但是如果k=50,我们就要写50层循环,这是不现实的。回溯算法就是将k层for循环转换成k层递归深度,从而让我们可以把代码写出来。1、问题抽象与代码实现1)将该问题抽象为树形结构:2)代码实现class Solution {private:/-----回溯算法-----/ vector<vector<int>> res; //用于存放总结果 .原创 2021-06-25 13:12:41 · 1151 阅读 · 1 评论 -
回溯算法理论
一、回溯算法理论原创 2021-06-25 10:49:33 · 212 阅读 · 0 评论