https://leetcode.cn/problems/combination-sum-iii/description/

<aside> 💡

77. 组合 差不多,就返回条件中收集结果步骤多了一步判断,同时剪枝策略多了一种

</aside>

vector<vector<int>> ans;
vector<int> path;
int sum = 0;

void backtracking(int num, int& k, int& n) {
		if (path.size() == k) {
				if (sum == n)
						ans.push_back(path);
				return;
		}
	
		// 剪枝1:同77.组合
		// 剪枝2:如果当前数已经大于n,那么该循环之后的数必定都大于n,执行剪枝
		for (int i = num; i <= 9 - (k - path.size()) + 1 && sum + i <= n; ++i) {
				sum += i;
				path.push_back(i);
				backtracking(i + 1, k, n);
				sum -= i;
				path.pop_back();
		}
}

vector<vector<int>> combinationSum3(int k, int n) {
		backtracking(1, k, n);
		return ans;
}