【回溯三、子集问题】78. 子集1、90. 子集 II

本文介绍了LeetCode中78题和90题的子集问题解决方案,通过回溯法详细讲解如何找出数组的所有子集。在90题中,增加了剪枝策略来优化算法,提高效率。同时提供了视频链接以便更深入理解解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

78. 子集1

leetcode: 问题详情.

b站: 视频详解.

方法一、回溯法

class Solution(object):
    def subsets(self, nums):

        def backtracking(start_index, nums, path, res):
            res.append(copy.deepcopy(path))  # 让[]也加入res
            for i in range(start_index, len(nums)):
                path.append(nums[i])
                backtracking(i+1, nums, path, res)
                path.pop()
                
        if not nums:
            return []
        res = []
        path = []
        start_index = 0
        backtracking(start_index, nums, path, res)
        return res

90. 子集 II

leetcode: 问题详情.

b站: 视频详解.

方法一、回溯法+剪枝

class Solution(object):
    def subsetsWithDup(self, nums):

        def backtracking(start_index, res, path):
            res.append(copy.deepcopy(path))
            for i in range(start_index, len(nums)):
                if i>start_index and nums[i] == nums[i-1]:  # 剪枝
                    continue
                path.append(nums[i])
                backtracking(i+1, res, path)
                path.pop()
            
        start_index = 0
        res = []
        path = []
        nums.sort()
        backtracking(start_index, res, path)
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值