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第90题子集II
LeetCode第90题"子集II"的解题方法,通过排序和回溯算法生成所有不重复的子集,并使用一个boolean数组来避免同一层中的重复元素,展示了解决这类问题的编码技巧。
LeetCode第90题子集II
|
4月前
|
Python
【Leetcode刷题Python】416. 分割等和子集
LeetCode 416题 "分割等和子集" 的Python解决方案,使用动态规划算法判断是否可以将数组分割成两个元素和相等的子集。
43 1
|
4月前
|
索引 Python
【Leetcode刷题Python】78. 子集
LeetCode题目78的Python编程解决方案,题目要求给定一个互不相同的整数数组,返回该数组所有可能的子集(幂集),且解集中不能包含重复的子集。
29 1
|
4月前
|
算法
LeetCode第78题子集
文章分享了LeetCode第78题"子集"的解法,使用递归和回溯算法遍历所有可能的子集,展示了将子集问题视为树形结构进行遍历的解题技巧。
|
6月前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
50 3
|
7月前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
61 4
|
7月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
51 2
|
7月前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
53 2
|
7月前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
75 1
|
7月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
55 1