leetcode 77. Combinations (枚举子集,限定集合大小)

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

思路:就是枚举子集,根据集合的大小剪枝。。。最后只要集合大小为k的集合

 1/* ***********************************************
 2Author :111qqz
 3Created Time :2017年04月13日 星期四 15时25分37秒
 4File Name :77.cpp
 5************************************************ */
 6class Solution {
 7public:
 8    set<vector<int> >se;
 9    int B[1005];
10    vector<vector<int> >res;
11    void get_subset(int n,int *B,int cur,int cnt,int k)
12    {
13	if (cur==n)
14	{
15	    vector<int>tmp;
16	    for ( int i = 0 ; i < n ; i++)
17		if (B[i]) tmp.push_back(i+1);
18	    if (tmp.size()==k)
19	    se.insert(tmp);
20	    return ;
21	}
22	if (cnt<k)
23	{
24	    B[cur] = 1;
25	    get_subset(n,B,cur+1,cnt+1,k);
26	}
27	B[cur] = 0 ;
28	get_subset(n,B,cur+1,cnt,k);
29    }
30    vector<vector<int>> combine(int n, int k) {
31	get_subset(n,B,0,0,k);
32	for (auto &it:se)
33	{
34	    res.push_back(it);
35	}
36	return res;
37    }
38};