问题描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
解答
''' 深度优先搜索:画出递归树,深度优先遍历遍历即可。 时间复杂度:O(n^2) ''' class Solution(object): def subsets(self, nums): result = [] def dfs(self, arr, nums, result): if len(nums) <= 0: result.append([]) #不能直接append(arr),因为append直接将arr的地址添加进去,导致后面arr值的改变会改变result中的arr的值。 result[-1].extend(arr) return 0 arr.append(nums[0]) dfs(self, arr, nums[1:], result) arr.pop() dfs(self, arr, nums[1:], result) dfs(self, [], nums, result) return result