当前位置: 首页 > news >正文

钓鱼网站查询系统百度度小店申请入口

钓鱼网站查询系统,百度度小店申请入口,电子商务网站建设与维护的考试,南通网站建设价格90. 子集 II 回溯嘛 子集啊排列组合啊棋盘啊都是回溯 回溯三部曲走起 跟78.子集比,本题给出的数组里存在重复元素了 所以在取元素时,如果同一层里取过某个元素,那么在该层就不能取重复的该元素了 如给出的数组[1,2,2] 可以在某一次递归中第一…

90. 子集 II

回溯嘛
子集啊排列组合啊棋盘啊都是回溯
回溯三部曲走起
跟78.子集比,本题给出的数组里存在重复元素了
所以在取元素时,如果同一层里取过某个元素,那么在该层就不能取重复的该元素了
如给出的数组[1,2,2]
可以在某一次递归中第一个取2放进子集,但后面的递归就不允许第一个取2放进子集里了
详情可以看代码随想录的图
代码随想录
所以要有一个数组used记录该层里取过的数

  1. 递归函数参数
    回溯问题一般涉及两个全局变量:
    保存本次递归中符合条件的结果path
    保存所有符合条件的结果的集合result
    以及回溯函数backtracking,因为是求子集问题,所以取过的元素不能重复取,所以回溯时,for循环要从startIndex开始,而不是从0开始
vector<int> path;
vector<vector<int>> result;
void backtracking(vector<int>& nums, int startIndex, vector<bool>& used)
  1. 递归终止条件
    当此时的startIndex已经大于数组长度时,就没有没取过的数组元素了,本次递归就终止了
if(startIndex>=nums.size()){return;
}
  1. 单层搜索逻辑
    单层的搜索逻辑是
    先将取出来的数存入path,再递归调用自身,然后回溯,删掉刚才取出来的数
path.push_back(nums[i]);
backtracking(……);
path.pop_back();

本题中,要判断取的nums[i]有没有使用过
如果没有,那么在backtracking要传入used数组,所以要递归前标记nums[i]已经被使用过了而递归后,需要回溯,从path中删除nums[i],所以要恢复为nums[i]未被使用

if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;
}//判定nums[i]有没有使用过
path.push_back(nums[i]);
used[i]=true;
backtracking(nums, i+1,used);
used[i]=false;
path.pop_back();

所以,回溯算法模板为

void backtracking(参数) {收集子集result.push_back(path);if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

那么组合起来,本题的回溯函数为

vector<int> path;
vector<vector<int>> result;
void backtracking(vector<int>& nums, int startIndex, vector<bool>& used){result.push_back(path);//收集子集if(startIndex>=nums.size()){return;}for(int i =startIndex;i<nums.size();i++){if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}//判定nums[i]有没有使用过path.push_back(nums[i]);used[i]=true;backtracking(nums, i+1,used);used[i]=false;path.pop_back();}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.clear();path.clear();vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end()); // 去重需要排序backtracking(nums, 0, used);return result;}

整理一下,得到最终代码:

class Solution {
private:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums, int startIndex, vector<bool>& used){result.push_back(path);//收集子集,要放在判定停止条件前,防止漏数if(startIndex>=nums.size()){return;}for(int i =startIndex;i<nums.size();i++){if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}//判定nums[i]有没有使用过path.push_back(nums[i]);used[i]=true;backtracking(nums, i+1,used);used[i]=false;path.pop_back();}}
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.clear();path.clear();vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end()); // 去重需要排序backtracking(nums, 0, used);return result;}
};
http://www.zhongyajixie.com/news/50007.html

相关文章:

  • 做免费资料分享网站会不会涉及版权seo全网图文推广
  • 求一些做里番的网站哪个app可以找培训班
  • 中国水利教育培训网站深圳seo外包
  • 深圳网站公司哪家好百度指数怎么分析
  • 石家庄做网站公司哪家好seo关键词搜索优化
  • 网站前台模块包括什么软件应用商店aso优化
  • 更改wordpress网站的url百度做网站推广电话
  • 网站建设分金手指专业一seo怎么才能优化好
  • java开发就是做网站么淘宝网站的推广与优化
  • 不用服务器做视频网站吗洛阳网站建设优化
  • 简单 大气 网站模版360免费建站系统
  • 网站如何做流媒体网络营销教材电子版
  • 湖南岳阳今日疫情新网站百度seo如何做
  • 如何用代码做分数查询的网站会计培训机构
  • 社交网站怎么制作seo整站优化公司持续监控
  • 郑州建设公司网站关键词排名查询工具有哪些
  • macbook air做网站开发网站推广的常用方法有哪些?
  • wordpress建站打不开二级页面搜索引擎优化教材答案
  • 如何做汽车的创意视频网站网络推广方式有哪几种
  • 网站空间费用电子商务网站建设论文
  • 深圳网站营销seo多少费用百度营销推广登录
  • 网站的代理页面怎么做的石家庄限号
  • 重点专业建设验收网站怎么推广一个平台
  • wordpress robots规则aso优化
  • 专门做单页的网站免费软件下载网站有哪些
  • 做报价在哪个网站询价常见的网站推广方式
  • 企业网站建设ppt网络舆情处置的五个步骤
  • 淘宝做批发的网站女排联赛排名
  • 怎么做游戏网站编辑网络推广方法有几种
  • 兰州建设一个网站多少钱公司网站优化方案