Keshawn_lu's Blog

Leetcode 216. 组合总和 III

字数统计: 270阅读时长: 1 min
2020/09/11 Share

题目简介:

找出所有相加之和为 nk 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

  • 所有数字都是正整数。
  • 解集不能包含重复的组合。

示例 1:

1
2
输入: k = 3, n = 7
输出: [[1,2,4]]

示例 2:

1
2
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

思路:

依然是回溯的做法,当元素数量 > k 或 和大于 n 时,直接return即可。

需要注意的是要从上个元素的下一个位置开始遍历(不能取重复的数字)。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:

vector<vector<int>> res;

void dfs(int k, int n, int pos, vector<int>& temp){

if(temp.size() == k && n == 0){

res.push_back(temp);
return;
}

if(temp.size() > k || n < 0)
return;

for(int i = pos; i <= 9; i++){

temp.push_back(i);

dfs(k, n - i, i + 1, temp);

temp.pop_back();
}
}

vector<vector<int>> combinationSum3(int k, int n) {

vector<int> temp;

dfs(k, n, 1, temp);

return res;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: