leetcode 39. Combination Sum40

来源:互联网 发布:出版社要出版专业知乎 编辑:程序博客网 时间:2024/05/17 07:00

https://leetcode.com/problems/combination-sum/description/

简单的回溯应用,就是第二个算法写的时候没考虑重复情况,如果排好序之后按每个值的个数依次遍历也是可以的

Combination Sum1

class Solution(object):
    def combinationSum(self, candidates, target):
    combination=[]
    def fd(sum,min,l):
    for i in candidates:
    if i>=min:
    if sum+i<target:
    nl=l[:]
    nl.append(i)
    fd(sum+i,i,nl)
    if sum+i==target:
    nl=l[:]
    nl.append(i)
    combination.append(nl)
   
    break
    if sum+i>target:
    break
    candidates.sort()
    nnl=[]
    fd(0,candidates[0],nnl)
    return combination

Combination Sum2

class Solution(object):
    def combinationSum2(self, candidates, target):
    combination=[]
    nnl=[]
    def fd(m,sum,l):
    if m==len(candidates):
    return 
    fd(m+1,sum,l)
    if sum+candidates[m]==target:
    nl=l[:]
    nl.append(candidates[m])
    nl.sort()
    if nl in combination:
    return
    else:
    combination.append(nl)
    return
    if sum+candidates[m]<target:
    nl=l[:]
    nl.append(candidates[m])
    fd(m+1,sum+candidates[m],nl)
    fd(0,0,nnl)
    return combination

原创粉丝点击