zoukankan      html  css  js  c++  java
  • leetcode-40

    leetcode-40 组合总和

    题目描述:

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。

    注:和39题比,增加的难点主要在于有重复数字
    解法一:回溯

    class Solution:
        def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
            self.res = []
            candidates.sort(reverse=True)
            self.find(candidates,target,0,[])
            return self.res
        
        def find(self,candidates,target,index,path):
            if target == 0:
                self.res.append(path[:])
                return 
            prev = 0
            for i in range(index,len(candidates)):
                if candidates[i] != prev and candidates[i]<=target:
                    path.append(candidates[i])
                    self.find(candidates,target-candidates[i],i+1,path)
                    path.pop()
                    prev = candidates[i]
    

    递归

    class Solution:
        def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
            self.res = []
            candidates.sort(reverse=True)
            self.find(candidates,target,0,[])
            return self.res
        
        def find(self,candidates,target,index,path):
            if target < 0:
                return
            if target == 0:
                self.res.append(path[:])
            for i in range(index,len(candidates)):
                if i > index and candidates[i] == candidates[i-1]:
                    continue
                self.find(candidates,target-candidates[i],i+1,path+[candidates[i]])
    

    注:体会递归与回溯的区别,回溯有push和pop这个过程?

  • 相关阅读:
    Spark之 SparkSql整合hive
    Spark之 使用SparkSql操作Hive的Scala程序实现
    Spark之 RDD转换成DataFrame的Scala实现
    Spark之 SparkSql、DataFrame、DataSet介绍
    Spark之 RDD
    Spark scala和java的api使用
    设计模式之四观察者模式
    设计模式之三静态代理模式
    设计模式之二装饰者模式
    设计思想之二面向接口编程
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11216253.html
Copyright © 2011-2022 走看看