题目:原题链接(中等)
标签:回溯算法、数组
| 解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
|---|---|---|---|
| Ans 1 (Python) | O ( S × K ) O(S×K) O(S×K) : 其中S为最终答案数量 | O ( S × K ) O(S×K) O(S×K) | 64ms (6.28%) |
| Ans 2 (Python) | – | – | 32ms (98.25%) |
| Ans 3 (Python) |
解法一(递归):
class Solution:
def __init__(self):
self.ans = set()
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
def iterator(lst, total, num=1):
# 处理当分支已经达到3个的情况
if len(lst) == k:
if total == n:
self.ans.add(tuple(lst))
# 处理分支加上当前元素后小于目标值的情况
if num <= 9 and total + num <= n:
# 添加当前元素到分支
iterator(lst + [num], total + num, num + 1)
# 不添加当前元素到分支
iterator(lst, total, num + 1)
iterator([], 0)
return [list(elem) for elem in self.ans]
解法二(使用itertools):
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
ans = []
for group in itertools.combinations([i for i in range(1, 10)], k):
if sum(group) == n:
ans.append(list(group))
return ans
本文深入探讨了组合求和III问题,提供了两种高效的解决方案:递归回溯算法和利用itertools库的迭代方法。通过具体代码实现,详细分析了每种方法的时间和空间复杂度,帮助读者理解并掌握算法设计与优化。
4458

被折叠的 条评论
为什么被折叠?



