zoukankan      html  css  js  c++  java
  • 17. 子集(Subsets)

    17. 子集

    中文English

    给定一个含不同整数的集合,返回其所有的子集。

    样例

    样例 1:

    输入:[0]
    输出:
    [
      [],
      [0]
    ]
    

    样例 2:

    输入:[1,2,3]
    输出:
    [
      [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]
    

    挑战

    你可以同时用递归与非递归的方式解决么?

    注意事项

    子集中的元素排列必须是非降序的,解集必须不包含重复的子集。

    输入测试数据 (每行一个参数)如何理解测试数据?
    DFS + 回溯
    class Solution:
        """
        @param nums: A set of numbers
        @return: A list of lists
        """
        '''
        大致思路:
        1.循环,取出所有符合的子集,最后加[]进来,返回
        '''
        def subsets(self, nums):
            #dfs方法
            
            results = []
            nums.sort()
            self.dfs(results, [], nums, 0)
            return results
            
            
        #递归的定义
        def dfs(self, results, array, nums, curindex):
            #递归的出口,注意,这里如果是往下走不了的话,不用加return
            if array not in results:
                results.append(list(array))
            
            #递归的拆解
            for i in range(curindex, len(nums)):
                array.append(nums[i])
                self.dfs(results, array, nums, i + 1)
                array.pop()
            
            
                

    18. 子集 II

    中文English

    给定一个可能具有重复数字的列表,返回其所有可能的子集。

    样例

    样例 1:

    输入:[0]
    输出:
    [
      [],
      [0]
    ]
    

    样例 2:

    输入:[1,2,2]
    输出:
    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]
    

    挑战

    你可以同时用递归与非递归的方式解决么?

    注意事项

    • 子集中的每个元素都是非降序的
    • 两个子集间的顺序是无关紧要的
    • 解集中不能包含重复子集

     

    class Solution:
        """
        @param nums: A set of numbers.
        @return: A list of lists. All valid subsets.
        """
        def subsetsWithDup(self, nums):
            # write your code here
            #dfs写法 + 回溯 
            
            results = []
            nums.sort()
            self.dfs(results, [], nums, 0)
            return results 
            
            
        #递归的定义
        def dfs(self, results, array, nums, curindex):
            #递归的出口
            if array not in results:
                results.append(list(array))
            
            #递归的拆解
            for i in range(curindex, len(nums)):
                array.append(nums[i])
                #其中i + 1,则下一次会自动从下一个元素开始,不会在取这次元素
                self.dfs(results, array, nums, i + 1)
                array.pop()
  • 相关阅读:
    Python函数
    linux—shell 脚本编程
    python 内建函数
    列表解析式(List Comprehension)
    python标准库(datetime)
    python字典(dict)
    常用数据结构
    C 2010年笔试题
    C 2012年笔试题(保)
    C 2012年笔试题
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13423674.html
Copyright © 2011-2022 走看看