• 2024-07-02第二十六天 第七章 回溯算法 part04 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列将其看作一个二叉树,可以知道,在二叉树每层中,不能取相同的元素。这题最主要要理解这个点。使用unordered_set对其进行降重。classSolution{public:vector<vector<int>>res;vector<int>cur;voidbacktracking(vector<int>&nums,intindex){
  • 2024-06-22190.回溯算法:组合(力扣)
    代码随想录(programmercarl.com)一、什么是回溯算法    回溯算法是一种通用的算法设计技巧,特别适用于解决组合、排列、子集等问题。它通过逐步构建解决方案,并在发现部分解决方案无效时撤销(回溯)部分计算,从而寻找所有可能的解决方案。    回溯算法的基本思
  • 2024-06-16Day24| 77. 组合 、216.组合总和III 、17.电话号码的字母组合
    77.组合对着在回溯算法理论基础给出的代码模板,来做本题组合问题,大家就会发现写回溯算法套路。在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路
  • 2024-06-06代码随想录算法训练营第二十九天 | 491.非递减子序列
    491.非递减子序列题目链接文章讲解视频讲解层间去重:回溯法相当于深搜,所以所以是一直递归到叶节点才开始回溯;每次进入backtracking也就进入了搜索树的下一层,所以每进入一层需要用一个used_set来记录使用过的元素;classSolution{private:vector<int>sub;vecto
  • 2024-06-04代码随想录算法训练营第二十四天 | 回溯算法 77.组合
    回溯算法理论基础文章讲解视频讲解回溯是递归的副产品,只要有回溯就会有递归回溯的本质是琼剧,所以效率不高回溯法可以解决的问题组合问题切割问题子集问题排列问题棋盘问题如何理解回溯回溯算法的问题都可以抽象为树形结构集合的大小就构成了书的快读,递归的深度
  • 2024-04-1527天【代码随想录算法训练营34期】第七章 回溯算法part03(● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串)
    39.组合总和怎么才能避免重复?比现在数小的数就别append到path里面了,之前肯定都试过了classSolution:defcombinationSum(self,candidates:List[int],target:int)->List[List[int]]:result=[]candidates.sort()self.backtracking(cand
  • 2024-04-1325天【代码随想录算法训练营34期】第七章 回溯算法part02 ( ● 216.组合总和III ● 17.电话号码的字母组合)
    **216.组合总和III**classSolution:defcombinationSum3(self,k:int,n:int)->List[List[int]]:result=[]self.backtracking(k,n,1,[],result,n)returnresultdefbacktracking(self,k,n,startingIndex,path,result,
  • 2024-04-1324天【代码随想录算法训练营34期】第七章 回溯算法part01 ( ● 理论基础 ● 77. 组合 )
    **理论基础**voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;backtracking(路径,选择列表);//递归回溯,撤销处理结果}}
  • 2024-04-03代码随想录 Day29 回溯算法 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列classSolution{private:vector<vector<int>>result;vector<int>path;voidbacktracking(vector<int>&nums,intstartIndex){if(path.size()>1){result.push_back(path);
  • 2024-04-01代码随想录算法训练营第二十五天(回溯2)|216. 组合总和 III、17. 电话号码的字母组合(JAVA)
    文章目录216.组合总和III解题思路源码17.电话号码的字母组合解题思路源码216.组合总和III找出所有相加之和为n的k个数的组合,且满足下列条件:只使用数字1到9每个数字最多使用一次返回所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可
  • 2024-03-29代码随想录算法训练营第二十四天(回溯1)|77. 组合(JAVA)
    文章目录回溯理论基础概念类型回溯模板77.组合解题思路源码回溯理论基础概念回溯是递归的副产品,本质上是一种穷举回溯解决的问题可以抽象为一种树形结构类型回溯主要用来解决以下问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定
  • 2024-03-26代码随想录算法训练营第二十七天|●39. 组合总和 ● 40.组合总和II ● 131.分割回文串(JS写法)
    39组合总和题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ一开始自己写的大概和答案差不多,但是弄不明白回溯要传递的参数,但是自己一开始想到了终止条件,如果>7了就
  • 2024-03-24代码随想录 第25天 | ● 216.组合总和III ● 17.电话号码的字母组合
    leetcode:216.组合总和III-力扣(LeetCode)classSolution{List<List<Integer>>res=newArrayList<>();LinkedList<Integer>link=newLinkedList<>();publicList<List<Integer>>combinationSum3(i
  • 2024-03-21代码随想录算法训练营day29 | leetcode 491. 非递减子序列、46. 全排列、47. 全排列 II
    目录题目链接:491.非递减子序列-中等题目链接:46.全排列-中等题目链接:47.全排列II-中等题目链接:491.非递减子序列-中等题目描述:给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重
  • 2024-03-20代码随想录 第二十四天| ●回溯 理论基础 ● 77. 组合
    回溯理论基础:回溯三部曲:制定回溯函数的参数和返回值确定回溯终止条件确定回溯遍历过程 回溯模板voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩
  • 2024-03-19代码随想录算法训练营day28 | leetcode 93. 复原 IP 地址、78. 子集、90. 子集 II
    目录题目链接:93.复原IP地址-中等题目链接:78.子集-中等题目链接:90.子集II-中等题目链接:93.复原IP地址-中等题目描述:有效IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。例如:"0.1.2.201"和"192.168.1.1"是有效IP
  • 2024-03-16代码随想录算法训练营day24 | leetcode 77. 组合
    目录题目链接:77.组合题目链接:77.组合题目描述:给定两个整数n和k,返回范围[1,n]中所有可能的k个数的组合。你可以按任何顺序返回答案。示例1:输入:n=4,k=2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例2:输入:n=1,k=1输出:[[1]
  • 2024-03-16leetcode代码记录(子集
    目录1.题目:2.我的代码:小结:1.题目:给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示
  • 2024-02-22回溯算法模板 & 78子集代码
     voidbacktracking(参数){   if(终止条件){       存放结果;       return;   }   for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){       处理节点;       backtracking(路径,选择列表);//递归       
  • 2024-02-21代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合
    回溯理论基础 回溯法,与递归有类似形式,本质是穷举(可能存在剪枝),效率并不高。回溯的模板:voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;
  • 2024-02-19复习回顾-回溯算法-90. 子集 II 【犹豫】
    注意点&感悟:对过滤条件放在for里面,还是外面,有些犹豫了。【疑问,先搁置】我感觉for里面,应该是进去树枝的过程,for外面写,应该是终止条件。================又看了一眼视频,for里面是取数的过程,所以,应该取数的过程,进行了剪枝。题目链接:90.子集II自己独立写的代码:classSo
  • 2024-02-19回顾复习-回溯算法-78. 子集
    注意点&感悟:复习是个好东西题目链接:78.子集自己独立写的代码:classSolution:defsubsets(self,nums:List[int])->List[List[int]]:res=[]self.backtracking(nums,0,[],res)returnresdefbacktracking(self,nums,start_index,
  • 2024-02-02Leetcode刷题第八天-回溯
    22:括号生成链接:22.括号生成-力扣(LeetCode)括号是一对,所以每一次递归结束条件是字符串长度=2*n有效括号判断:'('个数==')'个数时,当前必须是'(','('个数==n时,必须是')',其他情况当前位置遍历两边,既可以是'('又可以是')'1classSolution:2defgenerateParenth
  • 2024-01-18分割回文串 131
    这也是用回溯解决,回溯就是多层for循环,但是这一题有点难发现多层for循环体现在哪里。实际上该问题for循环的层数与字符串的间隔有关for循环的层数代表,分割线的个数;for循环的遍历代表这分割线的位置。这里引用卡哥的图:因为分割线不能取前一个的位置,所以要根据之前组合那题的套
  • 2024-01-18回溯初理解
    首先要明确一点回溯也是纯暴力的一种方法,就是多层for循环。但是有的题目你不能写出它具体有多少层for循环,因此用递归来表示内侧for循环的逻辑。比如说这道题,它for循环的数目是随着K变化的,K等于2是就两层for循环。卡哥给出回溯算法框架点击查看代码voidbacktracking(参数){