Skip to main content

78. 子集 [medium]

78. 子集 [medium]

https://leetcode-cn.com/problems/subsets/

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

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

通过次数101,923 | 提交次数131,546

Second Try

2020-07-03

这是一个很奇葩的写法,乍看到会有点迷糊,仔细分析才知道在干什么。 参考题解写出来的,现在看起来就是理所当然了。

class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""

rv = [[]]
for n in nums:
rv += [r + [n] for r in rv]
# print(rv)
return rv
  • 执行用时:20 ms, 在所有 Python 提交中击败了70.33%的用户
  • 内存消耗:12.8 MB, 在所有 Python 提交中击败了8.33%的用户

First Try

2020-07-03

本来觉得没什么思路的,结果发现每个元素的后一位比前一位大即可避免重复,因此可以放心写个回溯法。

回溯递归法可以解决需要无确定循环调用的问题,真是万能解题法。

class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""

rv = []

# 不允许包含重复元素,那么按照正序来
def recurs(nums, seq):
rv.append(seq)
if len(seq) == len(nums):
return
for n in nums:
if len(seq) == 0 or n > seq[-1]:
recurs(nums, seq + [n])

recurs(nums, [])
return rv
  • 执行用时:16 ms, 在所有 Python 提交中击败了89.47%的用户
  • 内存消耗:12.8 MB, 在所有 Python 提交中击败了8.33%的用户