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

专业的建设网站服务公司网页设计免费模板

专业的建设网站服务公司,网页设计免费模板,安徽省建设工程信息网站6,免备案虚拟空间题目: 给定一个数组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/346174.html

相关文章:

  • 怀柔手机网站建设找代写文章写手
  • 网站流量不够廊坊seo整站优化
  • wordpress cx udy硬件优化大师下载
  • 手机优化助手怎么样班级优化大师app下载学生版
  • 不用域名也可以做网站seo网站优化优化排名
  • 网站建设力洋网站关键词优化办法
  • 珠海网站建设科技公司网络策划与营销
  • 如何看网站的建站时间做seo必须有网站吗
  • 企业网站建设的特点bing搜索引擎下载
  • 什么网站做外贸好营销网
  • 国内ui做的好的网站有哪些公关公司经营范围
  • 桂林网站推广宁波seo搜索排名优化
  • 做期货浏览哪些网站长沙推广公司
  • 做网站时导航条一般用什么样式广州百度竞价开户
  • 龙岗网站设计公司价格广告设计
  • flash做安卓游戏下载网站网站按天扣费优化推广
  • java做网站需要什么爱站工具查询
  • 房子已交房 建设局网站查不到网站优化包括对什么优化
  • 网站上做旅游卖家要学什么软件平面设计正规培训机构
  • 济南网站建设系统营销策划公司名称
  • 好站站网站建设推广兰州网络推广优化怎样
  • 上海机械网站建设什么软件引流客源最快
  • pk10代码网站开发五种网络营销推广方法
  • 销售类网站模板广州seo网站推广平台
  • 设计网站需求域名注册购买
  • 上海专业网站建设公司站霸网络线上推广的三种方式
  • wordpress后台登陆logo做seo需要投入的成本
  • 如何做网上私人彩票网站广告营销策略有哪些
  • 做书的网站有哪些内容网站关键词公司
  • 优化wordpress登录页插件seo 网站优化推广排名教程