我发现了一些用于生成组合的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
一组项目的特定组合可以表示为二进制数字,其中数字的位n表示该组合是否包括n该组的项目#.
代码只是循环通过足够的二进制数来表示整个n项集(从0到2 (1<<n) - 1,与2 ^ n-1相同),并添加每个正好有c1位的项(表示项目'd由给定组合中的那些位表示)到列表中.
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |