我们不生产答案,只是大佬的搬运工,嘿嘿。

  1. 库函数
for a in range(len(list1)):for i in combinations(list1, a+1):print(i)
  1. 二进制位运算
def PowerSetsBinary(items):N = len(items)for i in range(2 ** N):#子集的个数combo = []for j in range(N):#用来判断二进制数的下标为j的位置的数是否为1if (i >> j) % 2:#模2判断二进制的最后一个数是否为1combo.append(items[j])print(combo)

原作者地址

  1. 反向位运算
def combinations(str):n=1<<len(str)for i in range(n):bits=[i>>offset&1 for offset in range(len(str)-1,-1,-1)]current=[str[index] for (index,bit) in enumerate(bits) if bit==1]print(''.join(current));

下面的方法都是来自于LeetCode的子集这个题目
4. 递归

def subsets(nums: List[int]) -> List[List[int]]:n = len(nums)output = [[]]for num in nums:output += [curr + [num] for curr in output]print(output)
  1. 回溯
def subsets(nums: List[int]) -> List[List[int]]:def backtrack(first = 0, curr = []):# if the combination is doneif len(curr) == k:  output.append(curr[:])for i in range(first, n):# add nums[i] into the current combinationcurr.append(nums[i])# use next integers to complete the combinationbacktrack(i + 1, curr)# backtrackcurr.pop()output = []n = len(nums)for k in range(n + 1):backtrack()print(output)
  1. 字典排序(二进制排序) 子集
def subsets(nums: List[int]) -> List[List[int]]:n = len(nums)output = []for i in range(2**n, 2**(n + 1)):# generate bitmask, from 0..00 to 1..11bitmask = bin(i)[3:]# append subset corresponding to that bitmaskoutput.append([nums[j] for j in range(n) if bitmask[j] == '1'])print(output)
  1. 迭代
def subsets(nums: List[int]) -> List[List[int]]:res = [[]]for i in nums:res = res + [[i] + num for num in res]print(res)
  1. 递归(回溯算法)
def subsets(nums: List[int]) -> List[List[int]]:res = []n = len(nums)def helper(i, tmp):res.append(tmp)for j in range(i, n):helper(j + 1,tmp + [nums[j]] )helper(0, [])print(res)

另附一个Java版的解法,个人使用来看的话,这个Java版的效率更高,但是苦于不知道怎么用Python实现。

public static void main(String[] args) {String str[] = { "A", "B", "C", "D", "E" };int nCnt = str.length;int nBit = (0xFFFFFFFF >>> (32 - nCnt));for (int i = 1; i <= nBit; i++) {for (int j = 0; j < nCnt; j++) {if ((i << (31 - j)) >> 31 == -1) {System.out.print(str[j]);}}System.out.println("");}}

原作者地址

多种方法列出集合中的所有子集(Python和Java实现)相关推荐

  1. 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )

    文章目录 一.使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 1.闭包中使用 == 作为 findAll 方法的查找匹配条件 2.闭包中使用 is 作为 findAll 方法的查找匹 ...

  2. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )

    文章目录 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 二.代码示例 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 集合的 every 方法 , 用于 ...

  3. Python 集合06 discard()方法—删除集合中的指定元素

    discard()方法-删除集合中的指定元素 文章目录 discard()方法-删除集合中的指定元素 1.语法要点 2.实操练习 (1)删除的元素在集合中 (2)删除集合中不存在的元素,discard ...

  4. Java入门第107课——使用add方法向集合中添加元素

    问题 使用add方法向集合中添加元素,详细要求如下: 1)使用ArrayList构造集合对象c,并输出该对象. 2)将字符串"a"."b"."c&qu ...

  5. 多种方法解决计算机程序中出现.DLL文件丢失的问题

    title: DLL-lose date: 2019-11-21 15:55:47 description: 解决计算机程序中出现.DLL文件丢失的问题   在安装某些软件,我们正准备开开心心地打开, ...

  6. 回溯法经典算法 求集合中所有的子集

    今天我们来看一下子集的问题. 题目描述:给定一个任意集合A,集合的长度为Length,让你打印出这个集合中所包含的所有子集. 题目分析:此问题实际上也是一个遍历树的问题,进行遍历每一个子元素,再进入下 ...

  7. lamaba中reduce方法将集合中的所有整数相加,并返回其总和

    reduce:也是对所有值进行操作,但它是将所有值,按照传入的处理逻辑,将结果处理合并为一个 如:将集合中的所有整数相加,并返回其总和 下面看个例子: 如:将集合中的所有整数相加,并返回其总和 代码如 ...

  8. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)

    定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...

  9. Python多种方法实现句子中单词倒置(好未来2017笔试题)

    问题描述:将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 代码: def rev1(s):     return ' '.jo ...

最新文章

  1. 对Linux文件中的多行进行注释
  2. python基础类型
  3. 2021 AAAI Fellow名单重磅出炉,华人学者遗憾连续两年无缘入选 | AI日报
  4. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.11节创建与应用图案...
  5. IO多路复用 select、poll、epoll
  6. JMeter中3种参数值的传递
  7. ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  8. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?
  9. SparkSQL中UDAF案例分析
  10. C++ assert() 详解
  11. 网工视频13第13章.计算机系统开发运行与配置疑难问题
  12. 国家邮政局公布一项数据 春节期间快递数量依旧很猛!
  13. matlab接口与编程,精通MATLAB接口与编程
  14. 公有链、私有链、联盟链、许可链,这些区块链又分别代表着什么意思?
  15. Hadoop数据读写原理
  16. PCA,ZCA,ICA,白化,稀疏编码和自编码器
  17. 一个好用的在线画图工具
  18. 关于解决国内手机号不能用于gmail邮箱注册问题
  19. win7怎么修改计算机皮肤,鼠标指针怎么换?小编教你win7系统更换鼠标指针皮肤的方法...
  20. Python与数学——使用Processing绘制高次方程图像

热门文章

  1. debounce实现 js_Vue.js以组件或者插件的形式实现throttle或者debounce
  2. c++判断奇偶_第十一届(今年)蓝桥杯省模拟赛 试题+源码 C/C++详解
  3. mysql5.5索引如何定义_MySQL5.5索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致问题-阿里云开发者社区...
  4. 汇编语言常见错误(转载)
  5. C语言 *** stack smashing detected *** 问题的解决
  6. 打印pdf文件 vfp_新技能,如何将多份pdf电子发票文件合成一份文档打印
  7. 某计算机系统中 时钟中断处理程序,2017年北京语言大学计算机系统结构839计算机系统与设计之计算机操作系统考研题库...
  8. js声明变量三种方式
  9. Ubuntu下基本的命令总结
  10. Spring Boot细节挖掘(拦截器)