• LeetCode刷题4——子集


    一、要求

     二、知识点

     1.回溯算法

        回溯算法相当于穷举法加剪枝,回溯算法总是和深度优先同时出现的,采用深度优先策略回溯到根,且根节点的所有子树都被搜索一遍才结束,并剪掉不符合要求的结果

    三、解题思路

    (1)采用回溯算法

    对于列表数据先对每层进行一次循环(每层代表数组的数量,从0到len(num)),对每层满足要求的数组添加的res结果中

    class Solution(object):
        def subsets(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            size =len(nums)
            res=[]
            for i in range(size+1):
                self.difs(nums,i,0,[],res)
            return res
        def difs(self,nums,depth,begin,path,res):
            if depth==len(path):
                res.append(path[:])
                return
            for i in range(begin,len(nums)):
                path.append(nums[i])
                self.difs(nums,depth,i+1,path,res)
                path.pop()
    

     测试情况如下:

    (2)还有一种通过位运算的方式实现,例如长度是3的数组[1,2,3],[0 1 0] 表示输出[2],[1 1 0]表示输出[1,2]

    通过这种方式,数组子集就替换成三个位置是否是0 1 的组合情况

  • 相关阅读:
    变分法浅析
    再生核希尔伯特空间(RKHS)在监督学习(SVM)中的应用
    关于对偶最优化
    两个公式
    Linux系统——账号管理
    Linux系统——源码编译安装
    Linux系统——最小化安装
    Linux系统——本地yum仓库安装
    Linux系统——rpm命令
    Linux系统——vim编辑器
  • 原文地址:https://www.cnblogs.com/bethansy/p/11862853.html
Copyright © 2020-2023  润新知