📄 testzh1.java
字号:
/**这个是组合,排列可以在选取出来后再计算一次这个数列中的所有可能*/
public class TestZH1 {
private void mn(int m, int n) {
if(m < n)
throw new IllegalArgumentException("Error m < n");
int[] array = new int[m];
for(int i = 0; i < m; i ++)
array[i] = i + 1;
BitSet bs = new BitSet(m);
for(int i = 0; i < n; i++)
bs.set(i, true);
do {
printAll(array, bs);
}while(moveNext(bs, m));
}
private boolean moveNext(BitSet bs, int m) {
int start = -1;
while(start < m)
if(bs.get(++start))
break;
if(start >= m)
return false;
int end = start;
while(end < m)
if(!bs.get(++end))
break;
if(end >= m)
return false;
for(int i = start; i < end; i++)
bs.set(i, false);
for(int i = 0; i < end - start - 1; i++)
bs.set(i);
bs.set(end);
return true;
}
private void printAll(int[] array, BitSet bs) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < array.length; i++)
if(bs.get(i))
sb.append(array[i]).append(',');
sb.setLength(sb.length() - 1);
System.out.println(sb);
}
public static void main(String[] args) throws Exception {
new TestA().mn(8, 3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -