- 2024-12-18【代码随想录】刷题记录(76)-子集
题目描述:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2:输入:nums=[0]输出:[[
- 2024-12-05力扣 LeetCode 51. N皇后(Day14:回溯算法)
解题思路:每次进入backtracking都表示进入下一行每个backtracking中处理当前行的各个列,看各列是否合法isValid中因为是一行一行向下遍历的,所以对应的当前行一定满足条件,没有放置过其他皇后,只需要看对应的列是否满足即可是否符合需要看左上45°和右上45°,之所以是往上看,
- 2024-12-03刷题分享12_3
刷题分享这两道题目均是子集问题,其实核心与组合问题一样,不同之处在于组合问题只有在叶子节点才收集结果(即存在终止条件),而子集问题则是要在每一个节点处都收集结果。第二个题还多加了一个去重的逻辑,大体是:使用一个used数组,先对原数组排序,如果遍历到了两个相邻的元素相同,那
- 2024-12-02刷题分享12-2日
刷题分享1.(力扣131)这是一道分割子串的问题,其核心在于理解清除startindex即为当前切割线,而每一层对应的startindex-I这个区间,其实就是当前分割出来的子串classSolution{public:vector<vector<string>>res;vector<string>path;booljudge(strings,int
- 2024-12-01刷题分享11_30
刷题分享1.(力扣216)这是一道回溯算法的经典题目。对于回溯算法,一般backtracking是没有返回值的,参数也比较不固定,需要根据每个题的特点来具体分析。这道题因为不能取到重复元素,所以需要额外加一个参数startindex,用来记录每一次开始时所应该取到的元素。在循环内部,一般的逻
- 2024-12-03Markdown
标题h1~h6标题用#号表示,#一级标题,##表示二级标题,依次类推注意:最后一个#字符与标题中间留一个空格#一级标题##二级标题###三级标题####四级标题#####五级标题######六级标题快捷键Ctrl+数字键1,2,3…字体名称语法快捷键字体加粗左右用**包裹起
- 2024-09-05代码训练营 Day23| 39. 组合总和 |40.组合总和II |131.分割回文串
39.组合总和1.组合没有数量要求2.元素可无限重复选取classSolution(object):defbacktracking(self,cadinates,target,sum_,startindex,path,result):#recursionstopconditionifsum_>target:#wecan'tfindanyanswerset
- 2024-08-22代码随想录算法训练营第二十二天(回溯 一)
开始学习回溯!回溯理论基础代码随想录文章链接:代码随想录文章摘要:什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一
- 2024-08-17括号生成-力扣
classSolution{private:vector<string>result;stringstr;public:voidbacktracking(intn,intl,intr){if(l==n&&r==n){result.push_back(str);return;}if(l<n){
- 2024-07-29day22-back tracking-part01-7.24
tasksfortoday:1.回溯理论基础2.77.组合3.216.组合总和III4.17.电话号码的字母组合-------------------------------------------------------------------1.回溯理论基础-什么是回溯:在二叉树系列中,我们已经不止一次,提到了回溯,回溯是递归的副产品,只要有递归就
- 2024-07-27代码随想录day24打卡|| 93复原ip地址 78子集| 90子集||
93复原ip地址力扣题目链接题目描述有效IP地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无
- 2024-07-26「代码随想录算法训练营」第二十一天 | 回溯算法 part3
93.复原IP地址题目链接:https://leetcode.cn/problems/restore-ip-addresses/题目难度:中等文章讲解:https://programmercarl.com/0093.复原IP地址.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/题目状态:好难,看题解通过思路:和分割回文串一样,甚至更难,在单层
- 2024-07-25「代码随想录算法训练营」第二十天 | 回溯算法 part2
39.组合总和题目链接:https://leetcode.cn/problems/combination-sum/题目难度:中等文章讲解:https://programmercarl.com/0039.组合总和.html视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ题目状态:久违的通过!思路:使用回溯模板,在单层循环时判断当前数组值是否大于
- 2024-07-24Day 22 回溯算法 part01
77.组合我的这个解法还算挺简单易懂的,还是看注释classSolution{List<List<Integer>>ans=newArrayList();//存储最终结果集合List<Integer>tmp=newArrayList();//记录单次的pathpublicList<List<Integer>>combine(intn,intk){backTr
- 2024-07-24「代码随想录算法训练营」第十九天 | 回溯算法 part01
回溯算法模板voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;backtracking(路径,选择列表);//递归回溯,撤销处理结果}}
- 2024-07-13【代码随想录|回溯算法 77. 组合】
代码随想录|回溯算法77.组合,216.组合总和III,17.电话号码的字母组合一、77.组合1.核心代码2.输入输出3.问题总结python一、77.组合内容77.组合1.核心代码代码如下(示例):classSolution:defcombine(self,n:int,k:int)->List[List[int]]:
- 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.组合
回溯算法理论基础文章讲解视频讲解回溯是递归的副产品,只要有回溯就会有递归回溯的本质是琼剧,所以效率不高回溯法可以解决的问题组合问题切割问题子集问题排列问题棋盘问题如何理解回溯回溯算法的问题都可以抽象为树形结构集合的大小就构成了书的快读,递归的深度