跳到主要内容

216.组合总和III

链接:216.组合总和III
难度:Medium
标签:数组、回溯
简介:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

题解 1 - typescript

  • 编辑时间:2020-09-11
  • 执行用时:76ms
  • 内存消耗:37.7MB
  • 编程语言:typescript
  • 解法介绍:回溯递归。
function combinationSum3(k: number, n: number): number[][] {
const ans: number[][] = [];
const used: number[] = [];
dfs(k, n);
return ans;
function dfs(count: number, sum: number): void {
if (count === 1) {
if (sum >= 1 && sum <= 9 && sum > used[used.length - 1]) ans.push([...used, sum]);
return;
}
const max = used[used.length - 1] || 0;
for (let i = max + 1; i <= 9; i++) {
if (used.includes(i)) continue;
used.push(i);
dfs(count - 1, sum - i);
used.pop();
}
}
}

题解 2 - python

  • 编辑时间:2024-04-21
  • 执行用时:42ms
  • 内存消耗:16.42MB
  • 编程语言:python
  • 解法介绍:dfs。
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
res = []
def dfs(num: int, k: int, n: int, arr: List[int]):
if k == 0:
if arr and n == 0:
res.append(arr[:])
elif n < 0: return
elif num == 10: return
else:
arr.append(num)
dfs(num + 1, k - 1, n - num, arr)
arr.pop()
dfs(num + 1, k, n, arr)
dfs(1, k, n, [])
return res