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

宁波市国家高新区建设局网站做720全景好的网站

宁波市国家高新区建设局网站,做720全景好的网站,公司网站要备案么,手机销售网站设计给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 先在这里说明一下排列和组合的区别? 组合:是指从一…

        给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

先在这里说明一下排列和组合的区别?

组合:是指从一个元素集合中选择出若干个元素,形成一个无序的子集,组合不考虑元素的顺序,只关注元素的选择

排列:是指从一个元素集合中选择出若干元素,形成一个有序的序列。排列关注元素的顺序。

简单的来说,就是排列是元素是有序的,组合是无序的

一般排列组合问题我们都可以看成是一棵树(每个元素不允许重复)           

因为我们这题要求的是不重复的排列数,所以我们的模板就可以套了(模板必须要记的——理解)

//不含重复元素的排列数
void backTrack(int[] nums){1for(int i=0;i<nums.length;i++){if(uesd[i])continue;used[i]=true;path.addLast(nums[i]);backTrack(nums);path.removeLast(nums[i]);used[i]=false;}

源代码如下:

    //存储结果集List<List<Integer>> list = new ArrayList<>();//路径Deque<Integer> path = new LinkedList<>();//是否被访问boolean[] visited = null;public List<List<Integer>> permute(int[] nums) {//对入参进行判断if (nums == null || nums.length == 0) {return list;}//对数组进行初始化visited=new boolean[nums.length];//开始递归,因为是排列,后面的元素也有可能在前面的元素前面,所以不需要传递索引backtracking(nums);//返回结果集return list;}private void backtracking(int[] nums) {//找到满足条件得到一种情况,存入结果集中if (path.size()== nums.length) {list.add(new ArrayList<>(path));return;}//遍历每一个元素for (int j = 0; j < nums.length; j++) {//如果被访问过,直接跳过,避免重复选择if(visited[j]){continue;}path.add(nums[j]);visited[j]=true;backtracking(nums);//回溯path.removeLast();visited[j]=false;}
}

在这里给大家提供我刷组合排列问题总结的模板:

组合子集问题每个元素的相对位置已经固定,所以每次去枚举的时候都是从自身的右侧开始枚举

排列问题的每个元素的相对位置是不固定的。左侧的元素可能会出现在右侧,故每次每次枚举都是从0位置上开始枚举的

  • 元素无重不可复选(nums中的元素唯一,每个元素最多只能被使用一次)

/*组合/子集问题回溯模板*/
/* [1,2,3]  */
void backTrack(int[] nums,int start){//顺序无关,每次从自身的右边开始for(int i=start;i<nums.length;i++){path.addLast(nums[i]);backTrack(nums,i+1);path.removeLast(nums[i]);}
}
/* 排列问题回溯模板*/
void backTrack(int[] nums){//顺序有关,每次从0开始for(int i=0;i<nums.length;i++){if(uesd[i])continue;used[i]=true;path.addLast(nums[i]);backTrack(nums);path.removeLast(nums[i]);used[i]=false;}
}
  • .元素可重不可复选(nums中的元素可以存在重复,每个元素最多只能被使用一次)

    Arrays.sort(nums);
    /* 组合/子集问题回溯算法框架 */
    void backtrack(int[] nums, int start) {// 回溯算法标准框架for (int i = start; i < nums.length; i++) {// 剪枝逻辑,跳过值相同的相邻树枝if (i > start && nums[i] == nums[i - 1]) {continue;}// 做选择track.addLast(nums[i]);// 注意参数backtrack(nums, i + 1);// 撤销选择track.removeLast();}
    }Arrays.sort(nums);
    /* 排列问题回溯算法框架 */
    void backtrack(int[] nums) {for (int i = 0; i < nums.length; i++) {// 剪枝逻辑if (used[i]) {continue;}// 剪枝逻辑,固定相同的元素在排列中的相对位置if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) {continue;}// 做选择used[i] = true;track.addLast(nums[i]);backtrack(nums);// 撤销选择track.removeLast();used[i] = false;}
    }
    

有很多人对上述剪枝操作不理解,看了这幅图你就会豁然开 

  • 元素无重可复选(nums中的元素都是唯一的,每个元素可以被使用若干次)

    /* 组合/子集问题回溯算法框架 */
    void backtrack(int[] nums, int start) {// 回溯算法标准框架for (int i = start; i < nums.length; i++) {// 做选择track.addLast(nums[i]);// 可以复选,所以i不用+1作为参数backtrack(nums, i);// 撤销选择track.removeLast();}
    }/* 排列问题回溯算法框架 */
    void backtrack(int[] nums) {for (int i = 0; i < nums.length; i++) {// 做选择track.addLast(nums[i]);backtrack(nums);// 撤销选择track.removeLast();}
    }

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

相关文章:

  • 专业做家政网站温县网站建设
  • 什么网站可以做期刊封面wordpress怎么用地图
  • 北海 网站建设 公司太原整站优化
  • 淘宝做导航网站有哪些国外php网站源码
  • 网站开发合同审核要点wordpress瀑布流风格
  • 网站推广究竟应该怎么做地方门户类网站产品推广
  • 电商网站的建设与维护做网站建设的公司有哪些方面
  • 深圳教育网站设计公司网站挣钱方式
  • 松江郑州阳网站建设高校门户网站的建设方案
  • 网站搜索排名优化价格收集链接 做网站
  • 百元建站餐饮网站开发参考文献
  • 上海网站建设找摩彼乐清网站建设哪家好
  • 类似红盟的网站怎么做dw2018网页制作步骤图文
  • 建设网站赚钱吗青岛app开发公司排行榜
  • 获取网站浏览者手机号外贸定制网站建设电话
  • 购物网站开发价格吉林市网站制作哪家好
  • 石家庄网站建设价格论述电子商务网站的建设
  • 乌兰县wap网站建设公司岳阳seo官网
  • 网站建设公司哪家好 要上磐石网络科讯怎么建设网站
  • 做点击率的网站企业网站开发一薇
  • 网站建设与管理维护自己搭服务器 做购物网站成本
  • 网站上漂亮的甘特图是怎么做的wordpress小工具点
  • 服务专业的网页制作服务2019做seo网站
  • 网站建设项目的实训报告wordpress 500一片空白
  • 网站友情链接要加什么用最新舆情信息网
  • 网站加入百度广告联盟牡丹江关键词优化
  • 九江专业网站建设定制如何注册商标名称以及logo
  • 上海网站seo优化网站建设费用的财务核算
  • 网站建设网做app软件大概多少钱
  • 平邑做网站的手机开发工具有哪些