python数字排列组合去重_排列组合-生成集合的所有子集
//一個(gè)有N個(gè)不重復(fù)元素的集合的某個(gè)子集,可以用這個(gè)N個(gè)元素中每個(gè)元素在或是不在這個(gè)子集中來(lái)表示。
//把這N個(gè)元素一字排開(kāi),每個(gè)位置可以用1來(lái)標(biāo)識(shí)對(duì)應(yīng)位置的元素在子集中,用0來(lái)標(biāo)識(shí)這個(gè)元素不在子集中
//依據(jù)計(jì)數(shù)的乘法原理這樣的排列數(shù)有2^N個(gè),也就是一個(gè)有N個(gè)不重復(fù)元素的集合有2^N個(gè)子集。
//而這種10表示方式剛好與N元的二進(jìn)制串一一對(duì)應(yīng)。
public class CombinationAll
{
public static void main(String[] args)
{
//指定集合的元素個(gè)數(shù)N
int N=Integer.parseInt(args[0]);
//使用一個(gè)長(zhǎng)度為N的一維數(shù)組來(lái)表示N元的2進(jìn)制串
int[] bin=new int[N];
//并從00...000開(kāi)始,到11..111結(jié)束。
//由于檢查11...111會(huì)花費(fèi)較多的比較,改用計(jì)數(shù)器來(lái)實(shí)現(xiàn)。
for(int i=0;i
bin[i]=0;
show(bin);
//計(jì)數(shù)器標(biāo)識(shí)還剩多少個(gè)子集沒(méi)有列出
double Total=Math.pow(2,N)-1;
//二進(jìn)制串每次增加1,計(jì)數(shù)器每次減1
int i;
while(Total>0)
{
//從低位向高位找到第一個(gè)0,然后將這個(gè)0變成1,將這個(gè)位置后面的1全變成0
for(i=N-1;i>=0 && bin[i]==1;i--)
bin[i]=0;
bin[i]=1;
show(bin);
Total--;
}
}
//顯示這個(gè)數(shù)組中的二進(jìn)制串
private static void show(int[] bin)
{
for(int i=0;i
StdOut.printf("%d",bin[i]);
StdOut.println();
}
}
總結(jié)
以上是生活随笔為你收集整理的python数字排列组合去重_排列组合-生成集合的所有子集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 笔记本在Win7下使用wubi安装Ubu
- 下一篇: Delphi将输入汉字自动产生拼音简码