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], ]又是一个很简单的题目啊!!递归。注意边界?
class Solution {
public:
vector<vector<int> > r;
int maxk;
int maxn;
void dfs(int left,int d,vector<int> &topVec)
{
if(d==maxk && left<=maxn)
{
topVec.push_back(left);
r.push_back(topVec);
topVec.pop_back();
return;
}
else if(maxn-left<maxk-d) return;
topVec.push_back(left);
for(int li=left+1;li<=maxn-maxk+d+1;li++)
{
dfs(li,d+1,topVec);
}
topVec.pop_back();
}
vector<vector<int> > combine(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
r.clear();
vector<int> topVec;
maxk=k;
maxn=n;
for(int li=1;li<=n;li++)
{
dfs(li,1,topVec);
}
return r;
}
};