博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode 216]求给定和的数集合 Combination Sum III
阅读量:5340 次
发布时间:2019-06-15

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

【题目】

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Note:

    • All numbers will be positive integers.
    • The solution set must not contain duplicate combinations.

Example 1:

Input: k = 3, n = 7Output: [[1,2,4]]

Example 2:

Input: k = 3, n = 9Output: [[1,2,6], [1,3,5], [2,3,4]]

【思路】

回溯,有模板。

适用范围:需要返回点的集合,形如List<List<Integer>>。

思路:新建fun函数迭代,从一个点flag开始迭代到边界点。

List<List<Integer>> ans=new ArrayList<>();

        List<Integer> tmp=new ArrayList<>();

对于ans:当tmp满足题目要求,把tmp中的答案作为集合加入到ans中。

对于tmp:tmp中临时存储每次迭代的答案集合,每完成一次回溯,tmp.remove(tmp.size()-1)保证新一次循环时,tmp为空

for循环flag到end,flag是已经遍历到的数据,end是遍历的终点(目标)。

反复迭代fun(ans,tmp,i+1,k,n-i);//距离期望还差n-i

【相关题目】

1、Leetcode 78]求子集 Subset 

2、Leetcode 90]求含有重复数的子集 Subset II 

3、讲解在这: 

4、

 

【代码】

class Solution {    public List
> combinationSum3(int k, int n) { List
> ans=new ArrayList<>(); List
tmp=new ArrayList<>(); fun(ans,tmp,1,k,n); return ans; } public void fun(List
> ans,List
tmp,int flag,int k,int n){ if(tmp.size()==k&&n==0) ans.add(new ArrayList
(tmp)); for(int i=flag;i<=9;i++){ tmp.add(i); fun(ans,tmp,i+1,k,n-i); tmp.remove(tmp.size()-1); } }}

 

转载于:https://www.cnblogs.com/inku/p/10022677.html

你可能感兴趣的文章
iOS10 国行iPhone联网权限问题处理
查看>>
Objective-C中一种消息处理方法performSelector: withObject:
查看>>
洛谷 P1991 无线通讯网
查看>>
[HIHO1184]连通性二·边的双连通分量(双连通分量)
查看>>
Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf 【动态规划】0-1背包
查看>>
SparkStreaming 源码分析
查看>>
【算法】—— 随机音乐的播放算法
查看>>
mysql asyn 示例
查看>>
DataGrid 点击 获取 行 ID
查看>>
git 使用
查看>>
边框圆角方法
查看>>
asp.net WebApi自定义权限验证消息返回
查看>>
php中eval函数的危害与正确禁用方法
查看>>
20172315 2017-2018-2 《程序设计与数据结构》第十一周学习总结
查看>>
MySQL添加、修改、撤销用户数据库操作权限的一些记录
查看>>
[维多利亚2 MOD] RecoverMingV(Vic2版复明) V1.1.1(2012-3-30更新),改进移除CHI核心的方式...
查看>>
2016年JD工作遇到的问题:1-5,搭建环境和熟悉项目过程中的坑
查看>>
JavaScript对象之面向对象
查看>>
C#中List和数组之间转换的方法
查看>>
屏幕分辨率过高导致软件界面显示过小影响使用
查看>>