Leetcode刷题(combination sum)golang and python

import (
    "sort"
)
var results [][]int
func combinationSum(candidates []int, target int) [][]int {
    results = nil
    sort.Ints(candidates)
    var result []int
    // fmt.Println(candidates)
    traversal(len(candidates)-1, target, result, candidates)
    
    return results
}

func traversal(start, tempNum int, result, candidates []int){
    if tempNum<candidates[0]|| tempNum==0{
        if tempNum==0{
            // fmt.Println(result)
            results = append(results, result)
        }
        return
    }
    for i:=start; i>=0; i--{
        if tempNum >= candidates[i]{
            result = append(result, candidates[i])
            cp := make([]int, len(result))
            copy(cp, result)
            traversal(i, tempNum - candidates[i], cp, candidates)
            result = result[:len(result)-1]
        }   
    }
}




func digui(start, tempNum int, result []int, candidates []int){
    if tempNum<candidates[0]||start<0{
        return
    }
    for j:=start; j>=0; j--{
        n := tempNum / candidates[j]
        tempNum = tempNum % candidates[j]
        for k:=0; j<n; k++{
            result = append(result, candidates[j])
        }
      
        if tempNum==0{
            cp := make([]int, len(result))
            results = append(results, cp)
            // result.Remove("xxx")
        }
        n--
        tempNum += candidates[j]
        
        digui(start-1, tempNum, result, candidates)  
    }
    return
}

PYTHON 版本

class Solution: res = [] flag = False

def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
    self.res = []
    track = []
    
    candidates.sort(reverse=True)
    self.traversal(candidates, target, track, 0)
    return self.res
    
def traversal(self, candidates, target, track, i):
    tmp = target 
    if track:
        for j in track:
            tmp -= candidates[j]
    while i < len(candidates):
        if candidates[i] > tmp:
            i += 1
        else:
            tmp = tmp - candidates[i]
            track.append(i)                
            if not tmp:
                self.flag = True
                break
    if not track and i == len(candidates):
         return
        
    tmpCandidate = [candidates[j] for j in track]
    if self.flag:
        self.res.append(tmpCandidate)
        self.flag = False
    
    i = track.pop()
   
    self.traversal(candidates, target, track,i+1)

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝/微信扫一扫,即可进行扫码打赏哦