1. 程式人生 > >Python作業(LeetCode 78)

Python作業(LeetCode 78)

題目描述:

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]


解題思路:

可以採用回溯和動態規劃方法,在此採用的是動態規劃的思路

基本想法是:

若原本有集合S,新新增一個元素構成集合S+1,新集合包含的子集分為兩部分,一部分是原S的子集,另一部分是原S的子集加上新元素後的子集


程式碼:

class Solution(object):
	def subsets(self, nums):
		result=self.ssubset(nums)
		for element in result:
			element.sort()
		return result
		
	def ssubset(self,nums):
		if len(nums)==0:
			return [[]]
		if len(nums)==1:
			return [[],nums]
		first=nums[0]
		temp=nums[1:]
		temp_sub=self.ssubset(temp)
		result=[]
		for element in temp_sub:
			result.append(element)
			add=list(element)
			add.append(first)
			result.append(add)
		return result