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

成都建设项目环境影响登记网站百度爱采购官方网站

成都建设项目环境影响登记网站,百度爱采购官方网站,wordpress短代码显示,射阳建设网站多少钱1.组合题目链接过程图:先从集合中取一个数,再依次从剩余数中取k-1个数。思路:回溯算法。使用回溯三部曲进行解题:递归函数的返回值以及参数:n,k,startIndex(记录每次循环集合从哪里开始遍历的位…

1.组合

题目链接

  1. 过程图:先从集合中取一个数,再依次从剩余数中取k-1个数。

  1. 思路:回溯算法。使用回溯三部曲进行解题:

  • 递归函数的返回值以及参数:n,k,startIndex(记录每次循环集合从哪里开始遍历的位置),其中startIndex 就是防止出现重复的组合。比如从1开始了循环,则使用startindex=2,让startindex作为下次循环的开始。

还有全局变量:一个是用来存放一个符合条件的结果path,一个用来存放所有符合条件的结果集合result。

  • 回溯函数终止条件:path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合,在图中path存的就是根节点到叶子节点的路径

  • 单层搜索的过程:for循环用来横向遍历,递归的过程是纵向遍历。

(1)for循环每次从startIndex开始遍历,然后用path保存取到的节点i。

(2)递归函数不断调用自己往深处遍历,总会遇到叶子节点,遇到了叶子节点就要返回。

(3)递归函数下面部分就是回溯的操作了,撤销本次处理的结果。

最终结果代码:

class Solution {// 存放单个结果path, 存放所有结果resList<List<Integer>> res = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {combineHelper(n, k, 1);return res;}// startindex就是循环开始位置private void combineHelper(int n, int k, int startindex) {// 终止条件 if (path.size() == k){res.add(new ArrayList<>(path));return;}// 单层逻辑for (int i = startindex; i <= n ; i++ ){path.add(i);combineHelper(n, k, i + 1);path.removeLast();}}
}
  1. 剪枝优化:

(1)假设n = 4,k = 4,就四个数,还求四个数的组合,那必然只有一个组合,从2开始for循环再找其他数没有意义。所以,可以剪枝的地方就在递归中每一层的for循环所选择的起始位置,在循环中i就是循环的起始位置。也就是说for循环的开始位置到结束位置一共的元素个数<k时,就不需要判断了。

(2)过程:

  • 已经选择的元素个数:path.size();

  • 还需要的元素个数为: k - path.size();

  • 在集合n中至多要从该起始位置 : n - (k - path.size()) + 1,开始遍历。也就是说 n - (k - path.size()) + 1是最晚的起始位置,如果超过了这个位置找元素,path的元素个数不可能到达k个。这里面+1是闭区间的意思。

最终优化后的代码:

List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {combineHelper(n, k, 1);return res;
}private void combineHelper(int n, int k, int startindex) {if (path.size() == k){res.add(new ArrayList<>(path));return;}for (int i = startindex; i <= n - (k - path.size()) + 1; i++ ){path.add(i);combineHelper(n, k, i + 1);path.removeLast();}
}

2.组合总和III

题目链接

  1. 过程图:和上一题组合类似,仍然是先取某个值,然后再从其他数中k-1个进行组合。

  1. 思路:回溯三部曲。

  • 确定递归函数参数:题目中的n和k,sum(已经收集的元素的总和也就是path里元素的总和),startIndex为下一层for循环搜索的起始位置。

  • 确定终止条件:path.size() 和 k相等且sum=n

  • 单层搜索过程: path收集每次选取的元素,sum来统计path里元素的总和。别忘了回溯。

3.代码:

class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combinationSum3(int k, int n) {backTracking(n, k, 1, 0);return result;}// targetSum就是n, sum是和private void backTracking(int targetSum, int k, int startIndex, int sum) {// 减枝if (sum > targetSum) {return;}if (path.size() == k) {if (sum == targetSum) result.add(new ArrayList<>(path));return;}// 减枝 9 - (k - path.size()) + 1for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {path.add(i);sum += i;backTracking(targetSum, k, i + 1, sum);//回溯path.removeLast();//回溯sum -= i;}}
}

http://www.mmbaike.com/news/73157.html

相关文章:

  • 微信小程序怎么做店铺免费广州营销优化
  • 淘宝优惠劵做网站模版seo优化几个关键词
  • 网站制作成品百度关键词多少钱一个月
  • 网页版百度优化公司网站排名
  • 做淘客需要网站西安外包网络推广
  • 视频网站超链接怎么做在百度怎么发布作品
  • 淘宝联盟怎么自己做网站网络营销的4p策略
  • 政府网站的建设与管理在线crm软件
  • 新华路网站建设济南网站建设公司
  • 网站布局设计理由跨境电商怎么做
  • 建设项目环境影响评价公示网站网站优化公司怎么选
  • 阿里云外贸建站卢松松外链工具
  • 用easyui做的网站可以免费投放广告的平台
  • 南山网站设计方案网络营销推广优化
  • 网站框架搭建设计搜狗网站收录
  • 海淀做网站seo数据是什么
  • 重庆市建设施工安全网站网站开发平台有哪些
  • 网站制作真人游戏娱乐平台怎么做武汉网络推广有哪些公司
  • 优斗士网站建设网址浏览大全
  • 联通的网站是谁做的大数据免费查询平台
  • 楼盘怎么在网站上做推广百度热搜榜排名
  • 南京网站建设招聘社交媒体营销三种方式
  • 学校网站建设是什么意思seo实战技巧
  • wordpress+模版+推荐谷歌seo是什么
  • 网站开发员属于网站设计方案
  • 域名备案通过后怎么做网站seo常见的优化技术
  • 阿里有做网站网络营销策划方案论文
  • 手机网站制作服务seo流量是什么意思
  • 郑州高新区做网站开发的公司农夫山泉软文300字
  • 怎么做网站音乐厦门seo报价