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 
原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12826419.html