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
> combine(int n, int k) {
combVec.resize(k);
ret.clear();
dfs(0,k,n,1);
return ret;
}
private:
vector
> ret;
vector
combVec; void dfs(int has,int need,int maxN,int start){ if(has==need){ ret.push_back(combVec); } else{ for(int i=start;i<=maxN;i++){ combVec[has]=i; dfs(has+1,need,maxN,i+1); } } } }; // class Solution { public: vector
> combine(int n, int k) { vector
> ret; if(k<=0 || n<=0) return ret; for(int i=1;i<=n-k+1;i++){ if(k>1){ vector
> tmp=dfs(n,k-1,i+1); for(int j=0;j
tmp(1,i); ret.push_back(tmp); } } return ret; } private: vector
> dfs(int n, int k,int start){ vector
> ret; if(k>1) for(int i=start;i<=n-k+1;i++){ vector
> tmp=dfs(n,k-1,i+1); for(int j=0;j
tmp(1,i); ret.push_back(tmp); } } return ret; } };