您的位置:首页 > 编程语言 > Python开发

LeetCode 78 Subsets (Python详解及实现)

2017-08-08 14:22 681 查看
【题目】

Given a set of distinct integers, nums,return all possible subsets.

 

Note: The solution set must not containduplicate subsets.

 

For example,

If nums = [1,2,3], a solution is:

 

[

 [3],

 [1],

 [2],

 [1,2,3],

 [1,3],

 [2,3],

 [1,2],

  []

]

给定一个数据集合,求该集合的所有子集。

 

【思路】

深度优先算法回溯:以【1,2,3】为例

每轮都传递一个数组起始指针的值,保证遍历顺序:

第一轮:先遍历以1 开头的所有子集,1→12→123 →13

第二轮:遍历以2开头的所有子集,2→23

第三轮:遍历以3开头的所有子集,3

这样三轮遍历保证能找到全部1开头,2开头,3开头的所有子集;同时,每轮遍历后又把上轮的头元素去掉,这样不会出现重复子集。(包括空集)

 

【Python实现】

  #每次调用dfs都传递数组S,会影响效率

     

class Solution(object):

   def subsets(self, nums):

       """

       :type nums: List[int]

       :rtype: List[List[int]]

       """

       if nums is None:

           return []

       res = []

       self.dfs(0, sorted(nums), res, [])

       return res

   def dfs(self, i, nums, res, subres):

       res.append(subres)

       print(res)

       for j in range(i, len(nums)):

           self.dfs(j+1, nums, res, subres + [nums[j]])

if __name__ == '__main__':

    S= Solution()

   S.subsets([1,2,3])

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode Python