zoukankan      html  css  js  c++  java
  • 穷举子集合

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

    例如:{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代码如下:

     1 public class Qjzjh {
     2     public static void fun1(String str){
     3         for(int i=1;i<Math.pow(2,str.length());i++)
     4         {       int a=i;
     5                 String ziji="";
     6              for(int j=str.length()-1;j>=0;j--)
     7                  {
     8                     if((a%2)!=0)ziji=str.charAt(j)+ziji;          //利用十进制转换为二进制的算法,求最后几位二进制
     9                     a=a/2;
    10                  }
    11              System.out.println(i+"  "+ziji);
    12         }
    13     }
    14     
    15     public static void fun2(String str){                        
    16         for(int i=1;i<Math.pow(2,str.length());i++)
    17         {   
    18                 String ziji="";
    19                 String binary=Integer.toBinaryString(i);         //借助Java自带的方法,将一个整数转换为2进制形式,转换后最高位为1
    20                 for(int j=binary.length()-1;j>=0;j--)
    21                  {
    22                     if(binary.charAt(j)!='0')ziji=str.charAt(j+str.length()-binary.length())+ziji;
    23                     
    24                  }
    25              System.out.println(i+"  "+ziji);
    26         }
    27     }
    28     public static void main(String[] args) {
    29         // TODO 自动生成的方法存根
    30         String str="ABC";
    31         fun1(str);
    32         System.out.println();
    33         fun2(str);
    34     }
    35 }
    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

  • 相关阅读:
    ajax与302响应
    读过/在读/想读的英文原著
    从编译DotNetOpenAuth中学到的程序集强签名知识
    百度输入法引起的Mac远程桌面Ctrl+.快捷键不起作用
    MacBook鼠标指针乱窜/不受控制问题的解决方法
    IIS中User-mode caching引起的Cache-Control不为public的问题
    让IIS8支持WCF的最简单方法
    在ASP.NET Web Forms中用System.Web.Optimization取代SquishIt
    苹果官方发布,iPhone 6 & Plus 设计素材
    jQuery 特效:盒子破碎和移动动画效果
  • 原文地址:https://www.cnblogs.com/guozhenqiang/p/5426227.html
Copyright © 2011-2022 走看看