问题:
给出两个整数n和k,返回从1......n中选出的k个数的组合。
解题思路:
该题是一个典型的深搜问题,解题思路是找 k 个数可以看成取 i 位置的元素(i 从 1 到 n - (k - 1)),然后在剩余的 i + 1 ~ n 之间取 k - 1 个数。递归实现取 k - 1 个元素的思路。
void execFind(vector<vector<int>> &result, vector<int> cur, int leftnum, int index, int &n){
//k个数找够
if(leftnum == 0){
result.push_back(cur);
return;
}
//剩下的数不足以凑够 k 个数
if(leftnum > n - index + 1){
return;
}
for(int i = index; i <= n; i++){
cur.push_back(i);
execFind(result, cur, leftnum - 1, i + 1, n);
cur.pop_back();
}
}
vector<vector<int> > combine(int n, int k) {
// write your code here
vector<vector<int>> result;
vector<int> cur;
if(n < 1 || k < 1 || n < k)
return result;
execFind(result, cur, k, 1, n);
return result;
}