力扣刷题Python笔记:子集

题目

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集
力扣刷题Python笔记:子集_第1张图片
来源:力扣(LeetCode)

Python解法

迭代算法

迭代算法的思路很简单,遍历给定数组 nums 的所有元素,每遍历一个元素就把存放当前结果的数组 result 中的所有子集加上该元素组成新的子集,并将这些新子集放入 result 中。

代码如下:

def subsets(self, nums: List[int]) -> List[List[int]]:
    result = [[]]
    for i in nums:
            result += [[i] + sub for sub in result]
    return result

回溯算法

这道题的回溯解法不如迭代算法简单易懂,定义一个函数 helper,有两个参数,分别是将要遍历的元素位置和当前子集,不断回溯,直到遍历完所有元素。

代码如下:

def subsets(self, nums: List[int]) -> List[List[int]]:
    result = []
    n = len(nums)
    def helper(i, tmp):
        result.append(tmp)
        for j in range(i, n):
            helper(j + 1,tmp + [nums[j]] )
    helper(0, [])
    return result

你可能感兴趣的:(力扣python刷题,算法)