标签:style blog color os 使用 ar for sp div
理论:
给定一组数字或符号,產生所有可能的集合(包括空集合),例如给定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為止,例如:
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; } } } }
标签:style blog color os 使用 ar for sp div
原文地址:http://www.cnblogs.com/huangcongcong/p/4008403.html