leetcode代码记录(子集

简介: leetcode代码记录(子集

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)

每一次进入回溯里的递归都是一个子集,这是特殊的地方。类比于 组合问题 的结果在树的叶子节点一样,子集问题 的结果在树的每个节点。因此,需要对每次进入回溯的路径做个记录,收集得到的就是子集结果。

目录
相关文章
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
10 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0
http://www.vxiaotou.com