leetCode(31):Combination Sum III

来源:互联网 发布:通达信证券交易软件 编辑:程序博客网 时间:2024/05/16 06:58

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.

Ensure that numbers within the set are sorted in ascending order.


Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]


Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]
         基本思路:首先确定第一个数,然后在剩余的数列中去寻找其余的数,找到则满足;说到这,自然而然--》递归

void combinationSum(int k,int index,int n,vector<int>& tmp,vector< vector<int> >& vec){//k个数据相加为n,数据范围是index~9,tmp用于临时存放数据,vec用于存放返回值if(k==1){//还有最后一个名额,如果找不到相符的数据,说明没有满足的情况,需要返回for(int i=index;i<=9;++i){if(i==n){tmp[k-1]=i;vec.push_back(tmp);break;}}}else{for(int i=index;i<=9;++i){tmp[k-1]=i;//反向存放数据,递归combinationSum(k-1,i+1,n-i,tmp,vec);}}}vector< vector<int> > combinationSum3(int k, int n){vector< vector<int> > vec;vector<int> tmp;for(int i=0;i<k;++i){//初始化tmp.push_back(0);}combinationSum(k,1,n,tmp,vec);for(int i=0;i<vec.size();++i){//因为数据是反向存放的,所以还需要一次反转reverse(vec[i].begin(),vec[i].end());}return vec;}





0 0
原创粉丝点击