Subsets in Python


Suppose we have a set of numbers; we have to generate all possible subsets of that set. This is also known as power set. So if the set is like [1,2,3], then the power set will be [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]

Let us see the steps −

  • We will solve this using recursive approach. So if the recursive method name is called solve(), and this takes the set of numbers (nums), temporary set (temp), res and index

  • The solve() function will work like below −

  • if index = length of nums, then create a list same as temp, and insert into res and return

  • temp[index] := 0

  • solve(nums, temp, res, index + 1)

  • temp[index] := 1

  • solve(nums, temp, res, index + 1)

  • The main function will be like below −

  • The main function will be like below:

  • res := an empty list

  • create temp list of size same as the nums, and fill this with 0

  • call solve(nums, temp, res, 0)

  • main_res := an empty list

  • for all lists in temp_res

    • temp := empty list

    • for i := 0 to length of lists

      • if lists[i] = 1, then insert nums[i] into temp

    • insert temp into main_res

  • return main res

Example

Let us see the following implementation to get better understanding −

class Solution(object):
   def subsets(self, nums):
      """
      :type nums: List[int]
      :rtype: List[List[int]]
      """
      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)

Input

[1,2,3,4]

Output

[[],[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]]
raja
Published on 03-Feb-2020 10:06:56
Advertisements