LeetCode216. Combination Sum III

来源:互联网 发布:特征向量组成的矩阵 编辑:程序博客网 时间:2024/06/10 00:44

LeetCode216. Combination Sum III

题目:

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.


Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]


Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]
题意分析:
这道题和LeetCode39基本用的是同一个思路。也是背包问题的扩展版。属于回溯的经典问题。
void isok(vector<vector<int>>& result, int n, int begin, vector<int>& tmp, int k) { //n:targetif (n == 0 && tmp.size() == k) {result.push_back(tmp);return;}else {for (int i = begin; i <= 9; i++) {if (i > n) break;tmp.push_back(i);isok(result, n - i, i+1, tmp, k);tmp.pop_back();}}}
代码:
class Solution {public:vector<vector<int>> combinationSum3(int k, int n) {vector<vector<int>> result;vector<int> tmp;isok(result, n, 1, tmp, k);return result;}void isok(vector<vector<int>>& result, int n, int begin, vector<int>& tmp, int k) { //n:targetif (n == 0 && tmp.size() == k) {result.push_back(tmp);return;}else {for (int i = begin; i <= 9; i++) {if (i > n) break;tmp.push_back(i);isok(result, n - i, i+1, tmp, k);tmp.pop_back();}}}};