
回溯算法
文章平均质量分 70
回溯算法
alone_yue
后端开发 算法 爱好健身打球游泳
展开
-
【Leetcode棋盘问题】51.N 皇后(一维递归) 37. 解数独(二维递归) 79. 单词搜索(二维递归)
文章目录Leetcode511.问题描述2.解决方案整体思路代码sxl上有,这只做几点强调:代码实现总结:Leetcode511.问题描述2.解决方案整体思路代码sxl上有,这只做几点强调:1.vector<vector< string > > ans存放结果相当于存放了多个棋盘2.回溯函数中的参数vector< string > chessboard,是记录目前为止棋盘的信息3.因为for中会进行合法检测,所以如果layer==n,说明一定是一个结果集原创 2021-09-21 21:02:03 · 300 阅读 · 1 评论 -
【Leetcode子集二】90.子集 II(元素有重复,取不重复子集-->排序加去重)
文章目录Leetcode901.问题描述2.解决方案总结:解法一:最经典的参数传used数组去重(效率高)解法二:由于是同层去重自然可以使用uSet去重(效率较低)解法三:完全理解之后的去重逻辑,used,uSet都不使用(效率最高)Leetcode901.问题描述2.解决方案总结:说白了本题相对于78.子集只多了一个排序加同层去重,这道题三种解法属于是把同层去重,全部家当讲明白了,这道题代码xslPDF没有但是刷题网站上有解法一:最经典的参数传used数组去重(效率高)同层去重if原创 2021-09-16 16:17:26 · 281 阅读 · 3 评论 -
【回溯性能分析】回溯不同问题,不同解决方案的性能分析
文章目录各种不同回溯问题的性能关于同层去重两种不同实现方式的性能各种不同回溯问题的性能关于同层去重两种不同实现方式的性能原创 2021-09-16 16:01:39 · 219 阅读 · 1 评论 -
【Leetcode排列】46. 全排列(元素各不相同,求全排列) 47. 全排列 II(元素有相同,求不重复全排列--->排序加去重) 22.括号生成(元素有相同,求不重复全排列--->排序加去重)
文章目录Leetcode461.问题描述2.解决方案总结代码Leetcode461.问题描述2.解决方案总结1.递归函数参数,由于是排列所以不需要startIndex,但是一个元素也不能用多次,所以需要一个uesd来标记,但是这个也不同于之前的标记,由于这个used是要标记从根到叶子的一条路径,所以要作为递归函数参数传入void backtracking(vector<int> nums,vector<bool>& used)2.好好结合回溯图理解这块原创 2021-09-16 10:34:09 · 487 阅读 · 1 评论 -
【Leetcode子集一】78.子集(元素各不相同,取不重复子集) 491.递增子序列(元素有重复,取递增不重复子序列-->不排序加去重)
文章目录子集问题Leetcode781.问题描述2.解决方案子集问题子集问题和之前的组合分割问题有所不同,子集问题需要找所有节点,但也属于组合问题且一个集合所以还是需要startIndexLeetcode781.问题描述2.解决方案1.由于收集每一个节点所以递归函数一开始就会收集而不是像之前满足递归终止才收集ans.push_back(path);if(startIndex>=nums.size()){ return;}2.也可以不加终止条件因为i=startIn原创 2021-09-13 16:41:53 · 155 阅读 · 0 评论 -
【Leetcode分割】131.分割回文串 93. 复原 IP 地址
文章目录Leetcode1311.问题描述2.解决方案Leetcode1311.问题描述2.解决方案class Solution {public: vector<vector<string> > ans; vector<string> path; bool IsPalindrome(string s,int start,int end){ //for(int i=start,j=end;start<end;i++,原创 2021-09-12 22:34:44 · 129 阅读 · 1 评论 -
【Leetcode组合二】39. 组合总和(同一集合,元素各不相同但可以重复选,组合不能重复) 40. 组合总和 II(同一集合,元素有相同但不可以重复选,组合不能重复)
文章目录Leetcode391.问题描述2.解决方案解法一:普通回溯解法二:排序剪枝回溯(在求和问题中,排序之后剪枝是很重要的套路)Leetcode391.问题描述2.解决方案解法一:普通回溯1.本题目和之前的组合一的不同在于,本题元素可以重复,所以在递归传参的时候就有区别,传入i就好,而不是i+1backtracking(candidates,target,sum,i);2.本题目和之前的组合一的不同在于,本题没有数量要求,所以递归终止只靠sum和target的关系if(sum>原创 2021-09-12 14:36:23 · 396 阅读 · 1 评论 -
【Leetcode组合一】77. 组合(同一集合,元素不可重复) 216. 组合总和 III(同一集合,元素不可重复) 17. 电话号码的字母组合(不同集合,元素不可重复)
文章目录Leetcode771.问题描述2.解决方案解法一:普通回溯解法二:剪枝回溯Leetcode771.问题描述2.解决方案解法一:普通回溯包含回溯三部曲,回溯模板等等要点,很重要!,俺的博客和代码sxl都说的很清楚就不多说了class Solution {public: vector<vector<int> > ans; vector<int> path; void backtracking(int n,int k,int原创 2021-09-11 16:51:30 · 601 阅读 · 1 评论 -
【回溯法总结】回溯法总结
void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 }}class Solution1 {public: vector<vector<int> &g原创 2021-09-11 16:33:49 · 359 阅读 · 2 评论