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