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],
]
class Solution {
public:
    void print(int pos, int n, int k, bool flags[], vector<vector<int> > &result)
    {
	    if (pos >= n || k == 0)
	    {
		    if (k == 0)
		    {
			    vector<int> temp;
			    for (int i = 0; i < n; i++)
			    {
				    if (flags[i])
				    {
					    temp.push_back(i+1);
				    }
			    }
			    result.push_back(temp);
		    }

		    return;
	    }
	    else
	    {
		    flags[pos] = true;
		    print(pos+1, n, k-1, flags, result);
		    flags[pos] = false;
		    print(pos+1, n, k, flags, result);
	    }
    }

    vector<vector<int> > combine(int n, int k) {
        bool flags[n];
	    vector<vector<int> > result;
	    if (n < k)
	    {
		    return result;
	    }
	    memset(flags, false, n*sizeof(bool));
	    print(0, n, k, flags, result);

	    return result;
    }
};


你可能感兴趣的:(Combinations)