穷举子集合

问题描述:给定一个集合,列举出这个结合的所有非空子集合。

例如:{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);
	}
}

输出结果为:

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值