Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]tag: backtracking
回溯问题,用递归求解就好。
class Solution { public: vector<vector<int> > combine(int n, int k) { vector<int> thisRe; vector<vector<int>> re; if(n < 1 || k == 0 || k > n){//判断初始条件 return re; } _combine(1, n, k, re, thisRe); return re; } void _combine(int start, int n, int k, vector<vector<int>> &re, vector<int> &thisRe){ if(k == 0){//finish re.push_back(thisRe); return ; } if(n - start + 1 < k){// not enough element left return ; } //push start in the result thisRe.push_back(start++); k--; _combine(start, n, k, re, thisRe); //don't push start in the result thisRe.pop_back(); k++; _combine(start, n, k, re, thisRe); } };