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
        




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值