class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
def huisu(index,end,nums,temp,path):
#剪枝
if path>n:
return
#和等于n而且个数还要是k
if path==n and len(temp)==k:
res.append(temp[:])
return
for i in range(index,end):
#剪枝
if nums[i]>n:
break
if visited[i]:
continue
#保证了不出现[1,2,3]和[3,2,1]这种情况
if len(temp)>0 and temp[-1]>nums[i]:
continue
temp.append(nums[i])
path+=nums[i]
visited[i]==True
huisu(i+1,end,nums,temp,path)
path-=nums[i]
visited[i]=False
temp.pop()
res = []
nums = [ i for i in range(1,10)]
#标记数组,保证重复的数不出现
visited = [False for _ in range(10)]
huisu(0,9,nums,[],0)
return res
总结:题目比较简单,就是基本的回溯模板,然后剪枝,不能重复,且数组的长度有要求,筛选一遍就可以了。不能出现重复的元素就需要标记数组。