1. 题目:
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集
(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
2. 我的代码:
class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: # 结果 result = [] # 全局路径 path = [] # 递归 + 回溯 def backtracking(start_index): result.append(path[:]) # for for i in range(start_index, len(nums)): path.append(nums[i]) backtracking(i + 1) path.pop() return backtracking(0) return result
仍然是回溯算法,不过不需要有终止条件,因为for循环完了即是循环结束可以作为终止条件(不像组合一样要求组合的长度为k)
每一次进入回溯里的递归都是一个子集,这是特殊的地方。类比于 组合问题 的结果在树的叶子节点一样,子集问题 的结果在树的每个节点。因此,需要对每次进入回溯的路径做个记录,收集得到的就是子集结果。