• 产生可能集合


    理论:

    给定一组数字或符号,產生所有可能的集合(包括空集合),例如给定1 2 3,则可能的集合為:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。

    解法;

    如果不考虑字典顺序,则有个简单的方法可以產生所有的集合,思考二进位数字加法,并注意1出现的位置,如果每个位置都对应一个数字,则由1所对应的数字所產生的就是一个集合,例如:

     

    000 {}
    001 {3}
    010 {2}
    011 {2,3}
    100 {1}
    101 {1,3}
    110 {1,2}
    111 {1,2,3}


    瞭解这个方法之后,剩下的就是如何產生二进位数?有许多方法可以使用,您可以使用unsigned型别加上&位元运算来產生,这边则是使用阵列搜寻,首先阵列内容全為0,找第一个1,在还没找到之前将走访过的内容变為0,而第一个找到的0则变為 1,如此重复直到所有的阵列元素都变為1為止,例如:

    000 => 100 => 010 => 110 => 001 => 101 => 011 => 111
     
    package 经典;
    
    public class PossibleSet2 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            char[] b={'a','b','c'};
            possibleSet(b);
        }
        
        public static void possibleSet(char[] b){
            
            int[] a=new int[b.length];
            
            for(int each:a)
                each=0;
            
            while(true)
            {
                int i;
                
                System.out.print("{");
                for(int k=0; k<a.length; k++)
                {
                    if(a[k]==1)
                        System.out.print(b[k]);
                }
                System.out.println("}");
                
                for(i=0; i<a.length && a[i]==1; a[i]=0, i++)
                    ;
                
                if(i==a.length)
                    break;
                else
                {
                    a[i]=1;
                }
            }
        }
    }
  • 相关阅读:
    Android源码学习之如何使用eclipse+NDK
    Android NDK 工具链的使用方法(Standalone Toolchain)
    gcc和g++的区别
    OCP-1Z0-051-V9.02-42题
    OCP-1Z0-051-V9.02-41题
    OCP-1Z0-051-V9.02-40题
    OCP-1Z0-051-V9.02-39题
    windows下自动生成文件夹下所有JNI所需的.h头文件
    OCP-1Z0-051-V9.02-38题
    Oracle DB 视图
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4008403.html
Copyright © 2020-2023  润新知