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

定制高端网站网站设计第一步怎么做

定制高端网站,网站设计第一步怎么做,网站新闻详细页面设计,怎么查公司营业执照图片欢迎访问杀马特主页:小小杀马特主页呀! 目录 前言: 例题一全排列: 1.题目介绍: 2.思路汇总: 3.代码解答: 例题二子集: 题目叙述: 解法一: 1.思路汇总…

                           欢迎访问杀马特主页:小小杀马特主页呀!

目录

前言:

例题一·全排列:

1.题目介绍:

2.思路汇总:

3.代码解答:

例题二·子集:

题目叙述:

解法一:

1.思路汇总:

2.代码解答:

解法二:

 

1.思路汇总:

2.代码解答:

 

文末小总结: 


前言:

本篇采用两道例题来讲解利用枚举元素的方法使用决策树通过递归以及穿插回溯来解答类似此类问题的系列模版操作(涉及全局变量以及引用传参使用需要回溯问题与具体什么时候使用等)。

当我们使用全局变量大都就要手动的回溯了,因为它回归到上一层自己不会改变,这里既可以选择全局变量又可以选择引用传参,但是比如一个递归函数需要使用多个变量,这时候引用传参就麻烦了,故需要我们使用全局变量了,因此视情况而定(本篇我们都使用的是全局变量)。

例题一·全排列:

1.题目介绍:

 欢迎大家来挑战:leetcode原题链接: . - 力扣(LeetCode)

2.思路汇总:

画出决策树,然后令dfs函数能帮我们完成此元素位置(从其上到末的path都放入ret)然后对于这个数组就是要遍历它了,由于我们要定义的path是全局遍历故

要考虑回溯(复原操作):这里就是我们每次往后递归,不能出现前面的元素,故这里开一个bool类型数组记录一下

(一开始是false,变成true就是已经出现了,故不进行操作继续循环)

终止条件:当path满了(等于nums的size)就返回就行了。

思路:从下标0开始遍历数组,遍历到一个就放入path,记录状态,然后继续下面递归,依次重复,

最后肯定会path等于size然后就放入ret,然后回溯:在上一层完成删除path的back即恢复现场的操作,每一次完成一条路线就往回溯,最后归到第一次for循环到退出。

决策图解:

3.代码解答:

class Solution {
public:vector<vector<int>> ret;vector<int> path;bool check[7]={false};//如果换成vector的bool类型只能用原数组指针区间初始化void dfs(vector<int>& nums){if(path.size()==nums.size()){ret.push_back(path);//终止条件return;}for(int i=0;i<nums.size();i++){if(check[i]==false){//使用后该状态防止重复使用path.push_back(nums[i]);check[i]=true;dfs(nums);//回溯(恢复现场):path.pop_back();check[i]=false;}}}vector<vector<int>> permute(vector<int>& nums) {dfs(nums);return ret;}};

例题二·子集:

 本题采取两种解法解答,一种是叶子节点放入ret,另一种就是每当递归到一层,这一层的path就是要存入ret的结果。

题目叙述:

  欢迎大家来挑战:leetcode原题链接:. - 力扣(LeetCode)

解法一:

1.思路汇总:

思路:枚举元素:分为选i位置的数和不选两条路径,然后往下递归,最后决策树相当于叶子节点的数就是我们要推进ret的,这里可以假设dfs递归函数可以帮我们完成从传入

  的pos位置一直走到叶子位置的所有分支路径最后的到叶子节点的path都放入ret,然后在第一次分别传入它的左支和右支就可以了。

  细节:注意传入的pos的位置以及回溯的时候path的变化

 

2.代码解答:

class Solution {
public:vector<vector<int>> ret;vector<int> path;
void dfs(vector<int>& nums,int pos){if(pos==nums.size()){ret.push_back(path);path.pop_back();//回溯return;}//可分为左支不走,右支走://走pos位置的元素(右支):path.push_back(nums[pos]);dfs(nums,pos+1);//不走pos位置的元素(左支):dfs(nums,pos+1);}vector<vector<int>> subsets(vector<int>& nums) {dfs(nums,0);return ret;}

解法二:

1.思路汇总:

思路:我们遍历数组放入path,并且当递归到下一层遍历的时候就是当前位置的下一个开始,所以循环的第一个是pos位置,结合每次下一层递归结束回到上一层都会把下一层的

  path里面加入的nums[i]删除即回溯,保证了每次每当我们进入一次递归第一个就是子集。 

细节:1·为什么ret添加不在for里面:这样的话最后一次递归完成后无法添加最后一次的结果。

        2·为什么每次递归函数传参是i+1不是pos+1呢:这样的话就会导致递归回来的时候走for里的i++的时候再次传入pos+1,又会进行刚才的递归操作了,不符合预期。

2.代码解答:

  void dfs(vector<int>& nums,int pos){ret.push_back(path);for(int i=pos;i<nums.size();i++){path.push_back(nums[i]);dfs(nums,i+1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {dfs(nums,0);return ret;}

文末小总结: 

像这种类型的dfs思路就是首先根据题意采取穷举等方法画出决策树,然后根据规则转化成递归代码:终止条件,递归操作,回溯,剪枝的判断,其次就是合理应用全局变量等

http://www.yayakq.cn/news/247071/

相关文章:

  • wordpress双站网站域名解释怎么做
  • 打开建设银行网站创意营销策划案例
  • 怎么做网站拍卖的那种外贸出口公司网站建设方案
  • 阿里云怎么创建网站中国品牌vi设计公司
  • 如何制作app网站wordpress模板如何修改_全是php标签_无法修改
  • 网站网页进口贵州便宜网站推广优化电话
  • 中职国示范建设网站网站怎么做自己站长
  • 建站卖素材手机app免费下载
  • 甘肃住房与城乡建设部网站定制 网站
  • 免费的seo网站膝最新源码
  • 免费金融发布网站模板下载怎么看网站做的好不好
  • 在安徽省住房和城乡建设厅网站企业网站如何做自然搜索
  • 如何接北京网站制作网页制作三剑客通常指
  • 新手做视频网站网站开发无使用期限怎么摊销
  • 嘉兴网站开发公司电商是干什么的是什么意思
  • 外贸商城网站系统南宁网站设计方法
  • 网站建设需求原型广西学校网站建设
  • 跨国网站浏览器凤岗镇仿做网站
  • 广州建造网站公司wordpress文章奇偶循环
  • 网页标准化对网站开发维护所有者的好处指定网站怎么设置路由器只访问
  • 电视台网站如何做新闻报道泰安网络公司协会
  • 在哪个网站找地理题做绿色网站模版
  • 有.net源码如何做网站佛山 网站建设培训班
  • asp.net mvc5网站开发之美 pdfwordpress社区型主题
  • 企业网站的制作周期农村做网站赚钱
  • 顶呱呱做网站南昌免费网站建站模板
  • 小型公司建网站学校网站建设的优势和不足
  • 昆明航空公司官方网站重庆高端网站建设
  • 做现货值得关注的财经网站互联网运营培训班哪个好
  • 爱站网关键词怎么挖掘如何做企业网站开发