穷举子集合
2016-04-24 01:47
239 查看
问题描述:给定一个集合,列举出这个结合的所有非空子集合。
例如:{A,B,C},非空子集合为:{A}{B}{C}{AB}{AC}{BC}{ABC}
这里采用编码的算法,就是为每一位进行编码,0表示对应的元素不出现,1表示对应的元素出现。
那么ABC对应的编码为
0. 000 {}
1. 001 {C}
2. 010 {B}
3. 011 {BC}
4. 100 {A}
5. 101 {AC}
6. 110 {AB}
7. 111 {ABC}
这里提供两种方法,
第一种方法fun1是自己手动将其对应的二进制位求出来,这种方法更加通用,推荐大家掌握这种方法。
第二种方法fun2是利用Java自带的包,可以将指定的整数转换为二进制形式。
Java代码如下:
View Code
输出结果为:
1 C
2 B
3 BC
4 A
5 AC
6 AB
7 ABC
1 C
2 B
3 BC
4 A
5 AC
6 AB
7 ABC
例如:{A,B,C},非空子集合为:{A}{B}{C}{AB}{AC}{BC}{ABC}
这里采用编码的算法,就是为每一位进行编码,0表示对应的元素不出现,1表示对应的元素出现。
那么ABC对应的编码为
0. 000 {}
1. 001 {C}
2. 010 {B}
3. 011 {BC}
4. 100 {A}
5. 101 {AC}
6. 110 {AB}
7. 111 {ABC}
这里提供两种方法,
第一种方法fun1是自己手动将其对应的二进制位求出来,这种方法更加通用,推荐大家掌握这种方法。
第二种方法fun2是利用Java自带的包,可以将指定的整数转换为二进制形式。
Java代码如下:
public class Qjzjh { public static void fun1(String str){ for(int i=1;i<Math.pow(2,str.length());i++) { int a=i; String ziji=""; for(int j=str.length()-1;j>=0;j--) { if((a%2)!=0)ziji=str.charAt(j)+ziji; //利用十进制转换为二进制的算法,求最后几位二进制 a=a/2; } System.out.println(i+" "+ziji); } } public static void fun2(String str){ for(int i=1;i<Math.pow(2,str.length());i++) { String ziji=""; String binary=Integer.toBinaryString(i); //借助Java自带的方法,将一个整数转换为2进制形式,转换后最高位为1 for(int j=binary.length()-1;j>=0;j--) { if(binary.charAt(j)!='0')ziji=str.charAt(j+str.length()-binary.length())+ziji; } System.out.println(i+" "+ziji); } } public static void main(String[] args) { // TODO 自动生成的方法存根 String str="ABC"; fun1(str); System.out.println(); fun2(str); } }
View Code
输出结果为:
1 C
2 B
3 BC
4 A
5 AC
6 AB
7 ABC
1 C
2 B
3 BC
4 A
5 AC
6 AB
7 ABC
相关文章推荐
- Android布局优化include 、merge、ViewStub的应用
- c++中的static
- 穷举子集合
- cas server +cas client 单点登录配置实例
- easyui datagrid-filter数据网格过滤的汉化
- Eclipse提高开发效率的快捷键
- hadoop程序开发之——常用linux命令小结
- capitalize
- 使用CAS实现SSO简洁教程
- C++中switch 语句中的变量声明和
- blog已搬迁
- 设计模式之单例模式
- Android Studio常用快捷键
- Android JNI 使用的数据结构JNINativeMethod详解
- Android源码下载
- PHP安装xdebug调试
- Git分支管理
- github本地库创建分支和合并分支以及提交到github远程库中的方法
- WPS快捷操作
- 第一周总结