Python 子集


假设我们有一组数字;我们需要生成该集合的所有可能的子集。这也被称为幂集。因此,如果集合像 [1,2,3],则幂集将是 [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]

让我们看看步骤 -

  • 我们将使用递归方法来解决这个问题。因此,如果递归方法名称称为 solve(),并且它接受数字集 (nums)、临时集 (temp)、res 和索引
  • solve() 函数的工作方式如下 -
  • 如果 index = nums 的长度,则创建一个与 temp 相同的列表,并将其插入 res 并返回
  • temp[index] := 0
  • solve(nums, temp, res, index + 1)
  • temp[index] := 1
  • solve(nums, temp, res, index + 1)
  • 主函数如下 -
  • res := 一个空列表
  • 创建一个与 nums 大小相同的 temp 列表,并将其填充为 0
  • 调用 solve(nums, temp, res, 0)
  • main_res := 一个空列表
  • 对于 temp_res 中的所有列表
    • temp := 空列表
    • 对于 i := 0 到列表的长度
      • 如果 lists[i] = 1,则将 nums[i] 插入 temp
    • 将 temp 插入 main_res
  • 返回 main res

让我们看看以下实现以获得更好的理解 -

示例

 在线演示

class Solution(object):
   def subsets(self, nums):
      temp_result = []
      self.subsets_util(nums,[0 for i in range(len(nums))],temp_result,0)
      main_result = []
      for lists in temp_result:
         temp = []
         for i in range(len(lists)):
            if lists[i] == 1:
               temp.append(nums[i])
         main_result.append(temp)
      return main_result
   def subsets_util(self,nums,temp,result,index):
      if index == len(nums):
         result.append([i for i in temp])
         #print(temp)
         return
      temp[index] = 0
      self.subsets_util(nums,temp,result,index+1)
      temp[index] = 1
      self.subsets_util(nums, temp, result,index + 1)
ob1 = Solution()
print(ob1.subsets([1,2,3,4]))

输入

[1,2,3,4]

输出

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

更新于: 2020年5月4日

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告