zoukankan      html  css  js  c++  java
  • 53. 数字组合 II

    153. 数字组合 II

    中文English

    给定一个数组 num 和一个整数 target. 找到 num 中所有的数字之和为 target 的组合.

    样例

    样例 1:

    输入: num = [7,1,2,5,1,6,10], target = 8
    输出: [[1,1,6],[1,2,5],[1,7],[2,6]]
    

    样例 2:

    输入: num = [1,1,1], target = 2
    输出: [[1,1]]
    解释: 解集不能包含重复的组合
    

    注意事项

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

     for循环内嵌dfs + curindex + 1不取重 + 判断存在 

    class Solution:
        """
        @param num: Given the candidate numbers
        @param target: Given the target number
        @return: All the combinations that sum to target
        """
        def combinationSum2(self, num, target):
            # write your code here
            
            num.sort()
            results = []
            #递归的调用
            self.dfs(results, target, 0, num, [])
            return results 
        
        #递归的定义,传入参数
        #第一个参数表示的是结果,results
        #第二个是剩余目标
        #第三个是当前索引
        #第四个是num
        #第五个是当前的array
        def dfs(self, results, remaintarget, curindex, num, array):
            #递归的出口,如果是剩余目标已经是小于0的话,则直接返回
            if remaintarget < 0:
                return 
            
            #如果是符合条件
            if remaintarget == 0:
                #list(array)深拷贝,不会和上一个指向同一个内存地址,results此时已经改变了
                if (list(array) not in results):
                    results.append(list(array))
                return 
        
            #递归的拆解
            for i in range(curindex, len(num)):
                array.append(num[i])
                #如果当前值已经被用了的话,当前索引加1就好了,就不会被再次被取用
                self.dfs(results, remaintarget - num[i], i + 1, num, array)
                array.pop()
  • 相关阅读:
    Android开发环境
    安卓学习
    Shuffle'm Up POJ
    Duizi and Shunzi HDU
    Find a path HDU
    Cyclic Nacklace HDU
    Keywords Search HDU
    HDU 1495 非常可乐
    J
    Fire Game FZU
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13418676.html
Copyright © 2011-2022 走看看