回溯
三二一一二三
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
16.47.全排列 II
public://用本层去重而不是全局去重return;i++) {//如果相同数字在这条路径之前用过了//如果相同数字在这层递归之前用过了if (used[i]==false) {//如果这一位没用过,才能放进来。排除掉自身return;return res;原创 2025-02-25 18:31:26 · 279 阅读 · 0 评论 -
15.46.全排列
/标记数组,位置一一对应。//因为要用到nums,就在这里定义,同时当递归的参数return res;原创 2025-02-25 17:47:25 · 210 阅读 · 0 评论 -
14.491.递增子序列
class Solution {//用数组去重public://遍历所有节点。不返回。//每层新建一个,用于本层去重i++) {if ((!path.empty() && nums[i]<path.back()) //排除不递增的情况|| used[nums[i]+100])//nums[]范围为[-100,100],加了之后变成[0,200]一共201个continue;return;return res;public://遍历所有节点。不返回。原创 2025-02-25 17:35:27 · 182 阅读 · 0 评论 -
13.90.子集II
public:void trace(vector<int>& nums,int st) {//统一加&呗,这样在本体直接修改i++) {//在同一个树层中去重//去重//去重需要排序,避免去重不完整return res;原创 2025-02-25 16:22:02 · 148 阅读 · 0 评论 -
11.78.子集
public://没有任何条件。就是遍历整棵树。return res;原创 2025-02-25 15:53:24 · 161 阅读 · 0 评论 -
10.93.复原IP地址
public://在s自己身上做文章即可void trace(string s,int st,int num) {//num记录分割的次数if (num==3) {//如果到三段了if (judge(s,st,s.size()-1)) {//第四段单独出来判断return;i<s.size();i++) {//分割前三段if (judge(s,st,i)) {//判断[st,i]这个区间的子串是否合法//s.begin和i都从0开始,故要+1num++;//从逗号之后开始。原创 2025-02-25 15:43:26 · 217 阅读 · 0 评论 -
9.131.分割回文串
public:if (idx>=s.size()) {//到size就已经是空的了。说明已经找完了从头开始截取的一组方案了return;i<s.size();i++) {if (judge(s,idx,i)) {//是回文串的话//substr是左闭右开,故要+1//弹出来。写递归后,你就当写第一层递归最后出来的时候return;//双指针判断回文串bool judge(string s, int st, int end) {//双指针就是for循环的进化版i<j;原创 2025-02-25 14:05:41 · 139 阅读 · 0 评论 -
8.40.组合总和II
return;//在for循环里剪枝记得在主函数里排序i++) {//去重//每个数字只能使用一次return res;原创 2025-02-25 12:53:48 · 158 阅读 · 0 评论 -
7.39. 组合总和
放在for循环剪枝,避免进入多一层递归。//剪枝.也可以放在for循环里面剪return;i++) {//可以重复读取,不用+1.每层递归把上一层的排除在集合之外return;//放在for循环里剪枝需要排序return res;//剪枝.也可以放在for循环里面剪跳过递归更优化return;i++) {//可以重复读取,不用+1.每层递归把上一层的排除在集合之外。原创 2025-02-25 12:38:47 · 188 阅读 · 0 评论 -
2.77.组合问题
class Solution {//剪枝版public:if (k==path.size()) {//路径够长的话return;//当成n叉树.剩的连长度都不够就剪枝i++) {//左闭右闭,n-已有的=还需要的。再+1等于开始。因为要左闭//传入每一次的新起点。是回溯的优化出来的东西也是目的//全局回溯return;return res;class Solution {//基础版public:return;i<=n;原创 2025-02-24 20:56:33 · 179 阅读 · 0 评论 -
4.216.组合总和III
剪枝版public:int sum=0;//剪枝。如果超过了,后面就没必要了if (path.size()==k) {//数量足无论是否达标都需要返回return;i++) {//所有数-已有的数+1。数量不足了就不用了sum+=i;sum-=i;return;//传入中间结果和起点return res;原创 2025-02-24 21:23:11 · 219 阅读 · 0 评论 -
5.17.电话号码的字母组合
public:void trace(string digits, int idx) {//idx是树的深度,也是递归的层数if (idx==digits.size()) {//表示树的深度。//会有空串的情况return;//转为数字//取出数字对应集合.接下来遍历集合i++) {//遍历的是集合return;//防止空串的情况//从0下表开始取集合。return res;原创 2025-02-24 23:25:14 · 289 阅读 · 0 评论
分享