• 135. 数字组合


    135. 数字组合

    中文English

    给定一个候选数字的集合 candidates 和一个目标值 target. 找到 candidates 中所有的和为 target 的组合.

    在同一个组合中, candidates 中的某个数字不限次数地出现.

    样例

    样例 1:

    输入: candidates = [2, 3, 6, 7], target = 7
    输出: [[7], [2, 2, 3]]
    

    样例 2:

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

    注意事项

    1. 所有数值 (包括 target ) 都是正整数.
    2. 返回的每一个组合内的数字必须是非降序的.
    3. 返回的所有组合之间可以是任意顺序.
    4. 解集不能包含重复的组合.
    输入测试数据 (每行一个参数)如何理解测试数据?

     for循环内嵌dfs + 排序 + 去重

    class Solution:
        """
        @param candidates: A list of integers
        @param target: An integer
        @return: A list of lists of integers
        """
        def combinationSum(self, candidates, target):
            # write your code here
            #for循环里面内嵌dfs写法 + 排序 + 去重
            
            results = []
            candidates.sort()
    #递归的调用 self.dfs(results, [], 0, candidates, target)
    return results #递归的定义 #传入参数 def dfs(self, results, array, curindex, candidates, remaintarget): #递归的出口,如果remaintarget小于0的时候,返回,继续下一次的寻找 if (remaintarget < 0): return #如果符合条件,remaintarget == 0,则加进results里面 if (remaintarget == 0): #注意:如果是append(array)是浅拷贝,只拷贝指针,不拷贝数据,array改变,上一个array指向的也是同样内存地址。list或者arrar[:]是深拷贝,拷贝指针也会拷贝数据进来 results.append(list(array)) return results #递归的拆解,for循环里面内嵌dfs写法 for i in range(curindex, len(candidates)): #去重处理,如果当前索引不同,但是值相同,则说明是重复的 if (i != 0) and (candidates[i] == candidates[i - 1]): continue array.append(candidates[i]) #不停的dfs,直到remaintarget==0或者< 0的时候返回 self.dfs(results, array, i, candidates, remaintarget - candidates[i]) #如果返回了,则开始往回移除值,一个一个移除在进行判断是否符合 array.pop()
  • 相关阅读:
    保险实战
    单片机的应用(位操作)
    显示转换(类型转换)
    游泳池的容量
    消失的重量(隐式变换)
    物品交换(变量)
    物品的存放(变量)
    输出变量的界值(int、float、long.....)
    在屏幕上输出内容
    C#笔记
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13418472.html
Copyright © 2020-2023  润新知