当前位置: 首页 > wzjs >正文

专业的建设网站服务公司推推蛙网站诊断

专业的建设网站服务公司,推推蛙网站诊断,今日油价92汽油中国石化,北京哪个区互联网公司比较多题目: 给定一个数组nums,数组中的元素互不相同,返回该数组所有可能子集(幂集) 解集不能包含重复的子集,可以按任意顺序返回解集 方法一:迭代法实现子集枚举 记原序列中元素的总数为 n,原序列…

题目:

给定一个数组nums,数组中的元素互不相同,返回该数组所有可能子集(幂集)

解集不能包含重复的子集,可以按任意顺序返回解集


方法一:迭代法实现子集枚举

记原序列中元素的总数为 n,原序列中的每个数字 ai​ 的状态可能有两种,即「在子集中」和「不在子集中」。我们用 1 表示「在子集中」,0 表示不在子集中,,那么每一个子集可以对应一个长度为 n 的 0/1 序列,第 i 位表示 ai​ 是否在子集中。例如,n=3 ,a={5,2,9} 时:

可以发现 0/1 序列对应的二进制数正好从 0 到 2 n −1。我们可以枚举 mask∈[0,2 n −1],mask 的二进制表示是一个 0/1 序列,我们可以按照这个 0/1 序列在原集合当中取数。当我们枚举完所有 2 
n 个 mask,我们也就能构造出所有的子集。

class Solution(object):def subsets(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""ans=[] #一个空列表用于存储所有子集for i in range(1<<len(nums)):#位移操作,等价于 2 ** len(nums)subset=[]for j,x in enumerate(nums):# 遍历 nums,获取每个元素 x 及其索引 jif i>>j&1:# 如果 i 右移 j 位后与 1 按位与的结果为 1subset.append(x)# 将当前元素 x 添加到 subset 中ans.append(subset)return ans
  • 时间复杂度:O(n2n),其中 n 为 nums 的长度。
  • 空间复杂度:O(1)。返回值的空间不计

方法二:递归

开始假设输出子集为空,遍历数组,对于数组中的每一个整数,每一步都向输出子集中所有子集添加这个整数,并生成新的子集。

dfs(0)
├── 包含 nums[0] = 1
│   └── dfs(1)
│       ├── 包含 nums[1] = 2
│       │   └── dfs(2)
│       │       ├── 包含 nums[2] = 3
│       │       │   └── dfs(3) → 添加 [1, 2, 3]
│       │       └── 不包含 nums[2] = 3
│       │           └── dfs(3) → 添加 [1, 2]
│       └── 不包含 nums[1] = 2
│           └── dfs(2)
│               ├── 包含 nums[2] = 3
│               │   └── dfs(3) → 添加 [1, 3]
│               └── 不包含 nums[2] = 3
│                   └── dfs(3) → 添加 [1]
└── 不包含 nums[0] = 1
    └── dfs(1)
        ├── 包含 nums[1] = 2
        │   └── dfs(2)
        │       ├── 包含 nums[2] = 3
        │       │   └── dfs(3) → 添加 [2, 3]
        │       └── 不包含 nums[2] = 3
        │           └── dfs(3) → 添加 [2]
        └── 不包含 nums[1] = 2
            └── dfs(2)
                ├── 包含 nums[2] = 3
                │   └── dfs(3) → 添加 [3]
                └── 不包含 nums[2] = 3
                    └── dfs(3) → 添加 []

class Solution(object):def subsets(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""t=[]  #用于存储当前子集ans=[] # 用于存储所有子集def dfs(cur): #定义深度优先搜索函数,cur 表示当前处理的索引if cur==len(nums): ## 如果当前索引等于 nums 的长度,说明已经处理完所有元素ans.append(t[:])# # 将当前子集 t 的拷贝添加到结果 ans 中return t.append(nums[cur])#将当前元素 nums[cur] 添加到子集 t 中dfs(cur + 1)  # 递归处理下一个元素t.pop()# 回溯,移除当前元素,恢复子集 tdfs(cur+1)# 不包含当前元素,递归处理下一个元素dfs(0)return ans

时间复杂度:O(n×2**n )。一共 2 **n个状态,每种状态需要 O(n) 的时间来构造子集。

空间复杂度:O(n)。临时数组 t 的空间代价是 O(n),递归时栈空间的代价为 O(n)。

源自力扣官方题解
 

http://www.dtcms.com/wzjs/401467.html

相关文章:

  • 营销信息潍坊关键词优化平台
  • 海外营销平台有哪些安徽seo网络推广
  • 如何做下载网站赚钱营销推广活动策划方案大全
  • 纯div+css做网站简洁版谷歌seo排名优化
  • 自己做网站靠什么赚钱seo软件工具
  • 网页设计与网站建设作业网站优化建议怎么写
  • 让别人做的网站不给源代码网络工程师培训班要多少钱
  • 江苏省城乡住房建设厅网站宁夏百度推广代理商
  • 西安+医疗网站建设营销软文500字范文
  • 网页设计与网站建设04在线测试seo基础篇
  • 邢台 网站建设网站收录怎么做
  • 商城网站建设精英市场调研分析报告
  • 延吉做网站ybdiran重庆网站seo技术
  • 装饰公司网站重庆seo杨洋
  • 长春微网站佛山网站建设十年乐云seo
  • 手机资讯网站源码seo狂人
  • 网站建设的价值是什么意思西安seo按天收费
  • 30g月流量网站网站自动推广软件免费
  • 做网站导航条怎么弄网址收录平台
  • 那些企业网站做的漂亮百度app下载安装普通下载
  • 官方网站建设 都来磐石网络安徽搜索引擎优化seo
  • 游戏界面设计网站百度知道客服电话人工服务
  • 网站制作报价是否合法seo综合查询是啥意思
  • 如何做链接淘宝客的网站黑帽seo排名优化
  • 如何免费自做企业网站产品推广ppt范例
  • 梧州网站推广设计今日新闻简报
  • 纪检监察网站建设情况汇报免费网站在线客服软件
  • wordpress建站主题广州百度推广客服电话多少
  • 多个端口网站如何做域名重定向石首seo排名
  • 做淘宝招牌软件网站海外推广专员