leetcode 组合总和

39. 组合总和
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。

candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。 

对于给定的输入,保证和为 target 的唯一组合数少于 150 个。

 

示例 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]]
示例 3:

输入: candidates = [2], target = 1
输出: []
示例 4:

输入: candidates = [1], target = 1
输出: [[1]]
示例 5:

输入: candidates = [1], target = 2
输出: [[1,1]]

resList = []


def dfs(candidates, sublist, target, last):
    
#    print('sublist=',sublist)
    if target == 0:
        resList.append(sublist[:])
    if target< candidates[0]:
        print('0结束递归')
        return 
    for n in candidates:
        if n > target:
            print('1结束递归')
            return
        if n < last:
            continue
        
        print('入栈')
        sublist.append(n)
        print('sublist=',sublist)
        print('target - n=',target - n)
        print('n=',n)
        print('#####################################')
        dfs(candidates,sublist,target - n, n)
        
        sublist.pop()
        print('出栈')
        print('sublist=',sublist)
        
resList = []

candidates=[2,3]
target=5
candidates = sorted(candidates)
dfs(candidates,[],target,0)

print(resList)

posted @ 2022-08-19 22:48  luoganttcc  阅读(13)  评论(0)    收藏  举报