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+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.