• 17. 子集


    17. 子集

    中文English

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

    样例

    样例 1:

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

    样例 2:

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

    挑战

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

    注意事项

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

     
     
    输入测试数据 (每行一个参数)如何理解测试数据?
    class Solution:
        """
        @param nums: A set of numbers
        @return: A list of lists
        """
        '''
        大致思路:
        1.循环,取出所有符合的子集,最后加[]进来,返回
        '''
        def subsets(self, nums):
            res = []
            for i in range(len(nums)):
                if i == 0:
                    res.append([nums[i]])
                else:
                    for j in range(len(res)):
                        res.append(sorted(res[j] + [nums[i]]))
                    res.append([nums[i]])
            res = res + [[]]
            return res 

    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.
        """
        '''
        大致思路:
        1.循环,取出所有符合的子集,最后加[]进来,返回
        '''
        def subsetsWithDup(self, nums):
            res = []
            for i in range(len(nums)):
                if i == 0:
                    res.append([nums[i]])
                else:
                    for j in range(len(res)):
                        a = sorted(res[j] + [nums[i]])
                        if a not in res:
                            res.append(a)
                    if [nums[i]] not in res:
                        res.append([nums[i]])
            res = res + [[]]
            return res 
  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12826419.html
Copyright © 2020-2023  润新知