LeetCode 78 [Subsets]

本文详细介绍了如何通过递归和迭代两种方法生成一个给定整数集合的所有可能子集。利用深度优先搜索(DFS)策略,递归方法构建解空间树;而迭代方法则通过循环遍历元素并构建新子集来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题

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

如果 S = [1,2,3],有如下的解:

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

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

解题思路

  • Backtracking, DFS
  • 数组要排序,接着一层一层的递归,每一层列表的元素个数加一
                                   [ ]
                                /   |   \
                             [1]   [2]   [3]
                           /  |     |
                    [1, 2] [1, 3] [2, 3]
                      /
                [1, 2, 3]

完整代码

# 递归的方法
# class Solution(object):
#     def subsets(self, nums):
#         """
#         :type nums: List[int]
#         :rtype: List[List[int]]
#         """
#         if nums == None:
#             return []
#         res = [[]]
#         self.dfs(sorted(nums), [], 0, res)
#         return res
        
#     def dfs(self, nums, path, index, res):
#         for i in xrange(index, len(nums)):
#             res.append(path + [nums[i]])
#             self.dfs(nums, path + [nums[i]], i+1, res)

# 迭代的方法
# 循环元素,往结果列表中添加符合的元素,在循环第二个元素,并且跟之前的答案组合
# 成为新的答案元素,直到循环结束
class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        result = [[]]
        for x in nums:
            with_x = []
            for s in result:
                # 这里不能直接使用result,因为是循环result
                with_x.append(s + [x])
            result += with_x
        return result
        

  

  

转载于:https://www.cnblogs.com/LiCheng-/p/6625920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值