我發現了generating combinations的一些Java代碼,但是我不明白它在做什麼,因爲它用位進行一些奇怪的操作。任何人都可以解釋這段代碼如何生成組合?
import java.util.Collections;
import java.util.LinkedList;
public class Comb{
public static void main(String[] args){
System.out.println(comb(3,5));
}
public static String bitprint(int u){
String s= "";
for(int n= 0;u > 0;++n, u>>= 1)
if((u & 1) > 0) s+= n + " ";
return s;
}
public static int bitcount(int u){
int n;
for(n= 0;u > 0;++n, u&= (u - 1));
return n;
}
public static LinkedList<String> comb(int c, int n){
LinkedList<String> s= new LinkedList<String>();
for(int u= 0;u < 1 << n;u++)
if(bitcount(u) == c) s.push(bitprint(u));
Collections.sort(s);
return s;
}
}
哇,這真的很低效。這是一個2^n算法。你應該使用別的東西。 – JoshD 2010-10-24 09:11:14