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

代码随想录 Q70.组合总和 Ⅲ

题目要求:找到和为n的k个数的组合。

思路:k即为树的深度,9为树的宽度(整个集合就只有9个数)。

举例:如果k = 2,n = 4时,就是在集合[1,2,3,4,5,6,7,8,9]中求k = 2,n = 4的组合(k个数,n为和)。

选取过程如下图所示:最后可得结果只有集合(1,3)符合条件。

回溯三部曲:

1.确定递归函数的参数(回溯法中的递归函数参数很难一次性确定下来,一般先写逻辑,需要啥参数了再填什么参数)。

(1)全局变量:result存放结果集,path存放符合条件的结果。

    List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();

(2)剩余参数:

--  targetSum(int)目标和,也就是题目中的n。

--  k(int)就是题目中要求的k个数的集合。

--  sum(int)为已经收集的元素的总和,也就是path里元素的总和。

-- startIndex(int)为下一层for循环搜素的起始位置。

private void backTracking(int targetSum, int k, int startIndex, int sum)

2.确定终止条件:总共取k个元素,所以如果path.size() == k,就终止。如果此时path收集到的元素和(sum)和targetSum(题目中的n)相同,就用result收集当前的path作为一个结果。

        //剪枝操作if (sum > targetSum) {return;}
        if (path.size() == k) {if (sum == targetSum) result.add(new ArrayList<>(path));return;}

3.确定单层搜索的过程:横向遍历for循环就是固定的9个数[1,...,9],因此for循环固定i<=9。处理过程就是path收集每次选取的元素,相当于树形结构里的边,sum来统计path里元素的总和。处理过程要和回溯过程一一对应,处理有加回溯就要有减。

        for (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;}

附代码:

    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;}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.dtcms.com/a/566781.html

相关文章:

  • 网站设计常用软件网站开发前期方案
  • 【IC】NoC设计入门 -- NoC 核心理论与架构
  • 黄冈市建设局官方网站全面加强基层基础建设
  • 企业网站seo方案网站改版后百度不收录
  • 自助建站平台iis 没有右键网站属性
  • 阿里云域名备案网站建设方案书上海未成年人思想道德建设网站
  • 站长工具一区拍卖网站模版
  • 县城网站怎样做经验中国114建材网
  • 婚介所网站开发费用电脑网页游戏平台
  • 优秀网站设计案例分析室内设计专用软件
  • html网站的设计做网站项目实例
  • 设计网站建设公司厦门网站建设厦门
  • IIC 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层
  • 如何在百度云上建设网站thinkphp集成wordpress
  • 济南正规的网站制作wordpress文章省略
  • 链表类力扣刷题总结
  • 网站建设工作室怎么开茂名网站开发公司
  • 衡阳建设学校官方网站广东省住房和城乡建设厅证件查询
  • 厦门做网站seo的网站应该如何进行优化
  • 白山商城网站建设wordpress默认原始图片
  • 做质量计量的网站有哪些博乐建设工程信息网站
  • 【Transformer系列(2)】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解
  • 东莞网站建设推广方案网站主题设计特色
  • 代做毕业设计网站有哪些网络整合营销推广
  • 嵌入式笔记系列——IIC
  • 网站维护一年一般多少钱视频链接生成器
  • wordpress网站好用吗专业的营销型网站定制
  • 离线推广网站规划书电子商务网站开发相关技术
  • 直接保存pandas DataFrame的内容到Excel文件中
  • excel T检测时[检验类型]参数设置的方法