博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
天天算法 LeetCode-216-组合总和 III
阅读量:6271 次
发布时间:2019-06-22

本文共 1167 字,大约阅读时间需要 3 分钟。

题目链接

题目描述

找出所有相加之和为 nk 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

  • 所有数字都是正整数。
  • 解集不能包含重复的组合。

示例 1:

输入: k = 3, n = 7输出: [[1,2,4]]复制代码

示例 2:

输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]复制代码
---------------------机智的思考线---------------------
---------------------机智的思考线---------------------
---------------------机智的思考线---------------------

解题方案

思路

  • 标签:递归回溯
  • 递归终止条件:数组中包含k个数,如果和为n则加入结果集,否则直接返回终止递归
  • 递归过程:循环遍历1-9,将新数字加入临时数组中进入下一层递归,出来后再将其移除
  • 回溯的关键在于,添加和移除,保证所有可能性都遍历到,整体结构和栈类似

代码

class Solution {    private List
> ans = new ArrayList<>(); public List
> combinationSum3(int k, int n) { traceBack(k, n, 0, 1, new LinkedList<>()); return ans; } public void traceBack(int k, int n, int sum, int begin, LinkedList
list) { if(k == 0) { if(n == sum) ans.add(new ArrayList<>(list)); return; } for(int i = begin; i < 10; i++) { list.add(i); traceBack(k - 1, n, sum + i ,i + 1, list); list.removeLast(); } }}复制代码

转载于:https://juejin.im/post/5cdf7cef6fb9a07eef69dbc7

你可能感兴趣的文章
MFC应用程序向导生成的文件
查看>>
Oracle体系结构之oracle密码文件管理
查看>>
【leetcode】Remove Element (easy)
查看>>
mysql多表查询及其 group by 组内排序
查看>>
alsa的snd_pcm_readi()函数和snd_pcm_writei()
查看>>
Android学习网站推荐(转)
查看>>
嵌入式根文件系统的移植和制作详解
查看>>
MEF部件的生命周期(PartCreationPolicy)
查看>>
LCD的接口类型详解
查看>>
nginx 基础文档
查看>>
LintCode: Unique Characters
查看>>
Jackson序列化和反序列化Json数据完整示例
查看>>
.net 中的DllImport
查看>>
nyoj 517 最小公倍数 【java睑板】
查看>>
include与jsp:include区别
查看>>
ftp的20 21端口和主动被动模式
查看>>
MySQL存储引擎选型
查看>>
Java中的statickeyword具体解释
查看>>
Linux车载系统的开发方向
查看>>
并发编程之五--ThreadLocal
查看>>