版权声明:转载请注明出处,谢谢 https://blog.csdn.net/zysps1/article/details/89035096
LeetCode题解(python)
39. 组合总和
题目描述
给定一个无重复元素的数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的数字可以无限制重复被选取。
说明:
- 所有数字(包括
target
)都是正整数。 - 解集不能包含重复的组合。
示例 1:
输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
示例 2:
输入: candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
解题心得
本题主要思路便是迭代
首先将列表进行排序(从小到大),每次迭代深入取元素,尽可能用小数填满,若等于target,则加入结果列表中,反之若小于target,进入迭代函数,若大于target,返回上次迭代。
以下代码执行用时 : 92 ms, 在Combination Sum的Python3提交中击败了72.24% 的用户
解题代码
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
rels = []
def findsum(rel,temp_sum,index):
for i,cd in enumerate(candidates):
if i < index:
#print(i,index)
continue
temp_rel = rel.copy()
temp_rel.append(cd)
tempsum = temp_sum+cd
if tempsum == target:
rels.append(temp_rel.copy())
return
elif tempsum < target:
findsum(temp_rel.copy(),tempsum,i)
else:
return
candidates = sorted(candidates)
findsum([],0,0)
return rels