[Leetcode] 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],
]

列出一個集合的所有組合情況。


如果k是固定的,那麼k層for循環也能暴力地弄出來。

但是這裏k是不固定的,那麼要想辦法模擬k層for循環。

嗯。回溯+遞歸。


class Solution {
public:
	vector<vector<int> > combine(int n, int k) {
		vector<vector<int> > v;

		if (k < 1 || n < k)
			return v;

		vector<int> comb;
		backTrack(v, comb, n, k, 1);
		
		/*
		for (int i = 0; i < v.size(); i++) {
			for (int j = 0; j < v[i].size(); j++) {
				cout << v[i][j] << ' ';
			}
			cout << '\n';
		}
		*/
		

		return v;
	}

private:
	void backTrack(vector<vector<int> > &v, vector<int> &comb, int n, int k, int start) {
		if (k == 0) {
			v.push_back(comb);
			return;
		}

		for (int i = start; i <= n; i++) {
			comb.push_back(i);  //  如果集合S中的元素不是有序的1~n,把i改成S[i]即可
			backTrack(v, comb, n, k - 1, i + 1);
			comb.pop_back();
		}
	}
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章