Java求一个集合的所有子集
转载请注明出处:
求一个集合的所有子集表示从一个集合当中,任取任意项或不取,所能得到的所有结果,比如有一个集合{a,b,c,d},那么{a,b}, {b, d}等都是它的子集,空集也是它的子集,
一个具有n 个元素的集合,它的子集共有2^n个,因为对于每个元素都有两种可能:选与不选。
具体的编程思想如下:
package com.example.demo.lettcode;
public class SubSet {
public static void main(String[] args) {
char[] charArr = {'a','b','c','d'};
subSet(charArr);
}
/**
* 思路:将每个元素拆分组合,对每个元素而言,只有两种选择,选中或为选中,从而可以考虑使用二进制的方式。
* 且由于每个元素在一个组合里面只有两种可能,所以可以得出总共的组合数有 2的n次方。
* 将2 的n次方进行 循环,每次匹配该值的二进数值,去根据二进制数中的1去匹配数组中的值
* 从而打印出所有的组合
*
* @param charArr
*/
public static void subSet(char[] charArr){
int charLength = charArr.length;
for (int i = 0; i < (1<<charLength); i++) {
String setStr = Integer.toBinaryString(i);
int unChoose = charLength-setStr.length();
System.out.print("{");
for (int j = 0; j < setStr.length(); j++) {
if (setStr.charAt(j)=='1'){
// 若数组长度为4,获取0010组合时;setStr = 10 ;元素 unChoose =2,charArr[unChoose+i] = charArr[2+0] = charArr[3] = c
System.out.print(charArr[unChoose+j]);
}
}
System.out.println("}");
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2020-03-23 for-each循环使用iterator进行遍历
2018-03-23 eclipse创建springBoot项目
2017-03-23 Mybatis配置映射文件中parameterType的用法小结