LeetCode78:Subsets(回溯)

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],
  []
]

LeetCode:链接

1)组合|非递归实现:这种方法是一种组合的方式。

① 最外层循环逐一从 nums 数组中取出每个元素 num

② 内层循环从原来的结果集中取出每个中间结果集,并向每个中间结果集中添加该 num 元素

③往每个中间结果集中加入 num

④将新的中间结果集加入结果集中

注意浅拷贝的使用!!!

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = [[]]
        for num in nums :
            # 使用浅拷贝,不改变列表中的列表元素值
            for temp in res[:]:
                # 使用浅拷贝,不改变原有的值
                x = temp[:]
                x.append(num)
                res.append(x)
        return res

2)回溯。

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        ans,res=[],[]
        self.solve(0, len(nums), nums, res, ans)
        return ans
                      
    def solve(self,cur,n,nums,res,ans):           
        ans.append(res[:])
        for i in range(cur,n):
            res.append(nums[i])
            self.solve(i+1, len(nums), nums, res, ans)
            res.pop()
扫描二维码关注公众号,回复: 4759761 查看本文章

猜你喜欢

转载自blog.csdn.net/mengmengdajuanjuan/article/details/85679967