LeetCode Subsets

LeetCode解题之Subsets

原题

给定一个由不同数字组成的集合,罗列出该集合的所有子集。

注意点:

  • 子集要包括空集合和该集合自己
  • 每个子集中的元素要按照不降序的顺序排列
  • 结果集没有顺序要求

例子:

输入: nums = [1,2,3]

输出:

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

解题思路

与 Combinations 是一类题目,都可以用递归来解决。递归是倒过来解决问题,要求n的情况,就要先求n-1。在这里尝试顺序的来解决,通过不断迭代的方法来求所有的子集。现在举个例子,集合[1]有[[],[1]]两个子集,当向其中添加一个元素时,[1,2]有[[],[1],[2],[1,2]]四个子集,可以看出来,在新添加一个元素的时候,是在原来子集的基础上,添加原子集中所有元素加上新元素的总集合。为了每个子集中的元素都是不降序的,要先把所有元素都排序。

AC源码

class Solution(object):
    def subsets(self, nums):
        """ :type nums: List[int] :rtype: List[List[int]] """
        result = [[]]
        for num in sorted(nums):
            result += [item + [num] for item in result]
        return result


if __name__ == "__main__":
    assert Solution().subsets([1, 2, 3]) == [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。

你可能感兴趣的:(LeetCode,算法,python,迭代,iterate)