您的位置:首页 > 其它

LeetCode Subsets

2016-01-24 20:33 141 查看

LeetCode解题之Subsets

原题

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

注意点:

子集要包括空集合和该集合自己

每个子集中的元素要按照不降序的顺序排列

结果集没有顺序要求

例子:

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

输出:

[code][
  [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源码

[code]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) 来获得相关源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: