给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]

二进制

①使用两层循环,外层循环为子集个数,对于集合长度为N,子集个数为。外层循环每循环一次一个子集。内层循环用来判断二进制下标为i的位置数是否为"1",如果对应位为1,那么就输出这个位,如果对应位为0,那么不输出这个位。

②以集合[1,2,3]为例,N = len([1,2,3]),外层循环 i 取值范围为[0,7],内层循环用于判断 i 对应二进制下标为j的位置是否为1。如果 (i >>j)%2为真,那么输出此子集。

③当 i =0时,无论 i 对应二进制000右移0位,1位,还是2位,即(i>>j)%2始终为0(假),输出空集。

④当 i =1时, i 对应二进制001右移0位,即(i>>j)%2为1(真),输出[1]。 i 对应二进制001右移1位为000,即(i>>j)%2为0(假),不追加。 i 对应二进制001右移2位为000,即(i>>j)%2为0(假),不追加。最终输出[1]。

......

⑤当 i = 3时,i 对应二进制011右移0位,即(i>>j)%2为1(真),输出[1]。 i 对应二进制011右移1位为001,即(i>>j)%2为1(真),追加输出[1,2]。 i 对应二进制011右移2位为000,即(i>>j)%2为0(假),不追加。最终输出[1,2]。

......

⑥当 i = 6时,i 对应二进制110右移0位,即(i>>j)%2为0(假),输出[]。 i 对应二进制110右移1位为011,即(i>>j)%2为1(真),追加输出[2]。 i 对应二进制110右移2位为001,即(i>>j)%2为1(真),追加输出[2,3]。最终输出[2,3]。

⑦当 i = 7时,i 对应二进制111右移0位,即(i>>j)%2为1(真),输出[1]。 i 对应二进制111右移1位为011,即(i>>j)%2为1(真),追加输出[1,2]。 i 对应二进制111右移2位为001,即(i>>j)%2为1(真),追加输出[1,2,3]。最终输出[1,2,3]。

Code

    def subsets(self, nums: List[int]) -> List[List[int]]:length, ans = len(nums), []for i in range(2 ** length):tmp = []for j in range(length):if (i >> j) % 2:tmp.append(nums[j])ans.append(tmp)return ans

78. Subsets 子集相关推荐

  1. LeetCode 78. Subsets

    78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...

  2. 【leetcode】(python)78. Subsets亚群

    亚群 Description Example 题意 解题思路 code 78. Subsets Medium Description Given a set of distinct integers, ...

  3. 【暴力枚举】LeetCode 78. Subsets

    LeetCode 78. Subsets Solution1:我的答案 迭代法,时间复杂度O(2n)O(2n)O(2^n),空间复杂度O(1)O(1)O(1) class Solution { pub ...

  4. 78. Subsets

    不定期更新leetcode解题java答案. 采用pick one的方式选择题目. 题意为给定一个数组,返回所有子集的集合. 采用递归的方式,逐步由空集合增加至最大数量集合.代码如下: 1 publi ...

  5. lintcode 中等题:subSets 子集

    题目 子集 给定一个含不同整数的集合,返回其所有的子集 样例 如果 S = [1,2,3],有如下的解: [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[] ] 注意 ...

  6. leetcode [78] Subsets

    Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...

  7. 78.Subsets

    Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...

  8. 面试刷题LeetCode经典100道

    准备面试刷题,100道经典LeetCode题目奉上. 题号 英文题名 中文题名 难度 likes 数 标签 1 Two Sum 两数之和 Easy 11712 数组,哈希表 2 Add Two Num ...

  9. 程序员应该如何学习算法?

    算法不是纯粹拼智商的,初学者不要上来直接撸<算法导论>!这是血泪 建议一:首先你得会一门程序设计语言 建议二:基础知识,数据结构,推荐大家看一下<大话数据结构>这本书,这本书看 ...

最新文章

  1. 总结一下Page_Load和OnLoad
  2. spring 获取 WebApplicationContext的几种方法
  3. java里面有控制器吗_mvc中 控制器部分可以使用Javabean完成吗?为什么?
  4. 纪念品分组(洛谷-P1094)
  5. eclipse中server location为灰色,不能修改
  6. Java TCP协议传输
  7. 大浪淘沙-新浪发展的秘密
  8. JAVA基础案例教程——模拟物流快递系统程序设计
  9. 第十八章 Chisel基础——模块与硬件类型
  10. JavaScript系列-闭包
  11. OA办公软件如何帮助企业更好地实现移动办公
  12. 结对编程—四则运算(JAVA)(卢泰佑、李密)
  13. 【数据库的备份与还原】
  14. bert系列第一篇: bert进行embedding
  15. Explaining Knowledge Distillation by Quantifying the Knowledge
  16. js省市县三级联动效果实例
  17. 微信公众号 - 下拉(展开/隐藏)
  18. 读书笔记《游戏改变世界》
  19. 华为机试—字符串处理专题
  20. python实现文件断点下载

热门文章

  1. mysql 禁用查询缓存 query cache
  2. oc79--数组的内存管理
  3. WAI-ARIA和屏幕阅读器
  4. hdu 5311 Hidden String(find,substr)
  5. 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
  6. [**奇文共赏**补充问题] 据说看五遍能懂的人智商 200
  7. 文件传送到服务器的软件,远程服务器文件传输软件
  8. css怎么使元素绝对定位有过度效果_小猿圈web前端讲解div+css绝对定位和相对定位...
  9. 算法工程师_浅谈算法工程师的职业定位与发展
  10. 计算机组成 指令扩展,计算机组成原理课程设计--指令扩展设计.doc