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> > combine(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function result.clear(); got.clear(); record.clear(); if (k == 0) { return result; } record = vector<int>(n, 0); max = n; trace_back(k); return result; } void trace_back(int n) { if (0 == n) { result.push_back(got); return; } for (int i = 1; i <= max; ++i) { if (record[i-1] == 0) { if (!got.empty() && got[got.size() -1] > i) { continue; } record[i-1] = 1; got.push_back(i); trace_back(n-1); got.pop_back(); record[i-1] = 0; } } } vector<vector<int> > result; vector<int> got; vector<int> record; int max; };