78. Subsets 子集
给定一组不含重复元素的整数数组 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 子集相关推荐
- LeetCode 78. Subsets
78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...
- 【leetcode】(python)78. Subsets亚群
亚群 Description Example 题意 解题思路 code 78. Subsets Medium Description Given a set of distinct integers, ...
- 【暴力枚举】LeetCode 78. Subsets
LeetCode 78. Subsets Solution1:我的答案 迭代法,时间复杂度O(2n)O(2n)O(2^n),空间复杂度O(1)O(1)O(1) class Solution { pub ...
- 78. Subsets
不定期更新leetcode解题java答案. 采用pick one的方式选择题目. 题意为给定一个数组,返回所有子集的集合. 采用递归的方式,逐步由空集合增加至最大数量集合.代码如下: 1 publi ...
- lintcode 中等题:subSets 子集
题目 子集 给定一个含不同整数的集合,返回其所有的子集 样例 如果 S = [1,2,3],有如下的解: [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[] ] 注意 ...
- leetcode [78] Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...
- 78.Subsets
Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...
- 面试刷题LeetCode经典100道
准备面试刷题,100道经典LeetCode题目奉上. 题号 英文题名 中文题名 难度 likes 数 标签 1 Two Sum 两数之和 Easy 11712 数组,哈希表 2 Add Two Num ...
- 程序员应该如何学习算法?
算法不是纯粹拼智商的,初学者不要上来直接撸<算法导论>!这是血泪 建议一:首先你得会一门程序设计语言 建议二:基础知识,数据结构,推荐大家看一下<大话数据结构>这本书,这本书看 ...
最新文章
- 总结一下Page_Load和OnLoad
- spring 获取 WebApplicationContext的几种方法
- java里面有控制器吗_mvc中 控制器部分可以使用Javabean完成吗?为什么?
- 纪念品分组(洛谷-P1094)
- eclipse中server location为灰色,不能修改
- Java TCP协议传输
- 大浪淘沙-新浪发展的秘密
- JAVA基础案例教程——模拟物流快递系统程序设计
- 第十八章 Chisel基础——模块与硬件类型
- JavaScript系列-闭包
- OA办公软件如何帮助企业更好地实现移动办公
- 结对编程—四则运算(JAVA)(卢泰佑、李密)
- 【数据库的备份与还原】
- bert系列第一篇: bert进行embedding
- Explaining Knowledge Distillation by Quantifying the Knowledge
- js省市县三级联动效果实例
- 微信公众号 - 下拉(展开/隐藏)
- 读书笔记《游戏改变世界》
- 华为机试—字符串处理专题
- python实现文件断点下载
热门文章
- mysql 禁用查询缓存 query cache
- oc79--数组的内存管理
- WAI-ARIA和屏幕阅读器
- hdu 5311 Hidden String(find,substr)
- 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
- [**奇文共赏**补充问题] 据说看五遍能懂的人智商 200
- 文件传送到服务器的软件,远程服务器文件传输软件
- css怎么使元素绝对定位有过度效果_小猿圈web前端讲解div+css绝对定位和相对定位...
- 算法工程师_浅谈算法工程师的职业定位与发展
- 计算机组成 指令扩展,计算机组成原理课程设计--指令扩展设计.doc