Python 中的子集

pythonserver side programmingprogramming更新于 2025/11/22 16:44:17

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

让我们看看步骤 −

  • 我们将使用递归方法解决这个问题。因此,如果递归方法名称称为solve(),并且它采用数字集(nums)、临时集(temp)、res和index
  • 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大小相同的临时列表,并用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]]

相关文章


有用资源