题意
求在区间[1,n]内的k个数的所有组合。
题解
用一个flag数组表示区间内的一个数是否在当前组合内:存在(true)、不存在(false)
代码
class Solution {
public:
vector<vector<int> > result;
void combine_recur(bool flag[], int pos, int n, int k)
{
if(pos == n)
{
if(k != 0)
return;
else if(k == 0)
{
vector<int> temp;
for(int i = 1; i < n; i++)
if(flag[i] == true)
temp.push_back(i);
result.push_back(temp);
}
}
else
{
flag[pos] = true;
combine_recur(flag, pos + 1, n, k - 1);
flag[pos] = false;
combine_recur(flag, pos + 1, n, k);
}
}
vector<vector<int>> combine(int n, int k) {
bool *flag = new bool[n + 1];
fill(flag, flag + n + 1, false);
combine_recur(flag, 1, n + 1, k);
return result;
}
};