假如一个数组是【1,2,3】,我想打印字符串1,2,3,12,13,23
就相当于数学中的C32,就是3*2*1种结果,代码应该怎么写的,求大佬们告知
假如一个数组是【1,2,3】,我想打印字符串1,2,3,12,13,23
就相当于数学中的C32,就是3*2*1种结果,代码应该怎么写的,求大佬们告知
import java.util.ArrayList;
import java.util.List;
public class Combination {
public static void main(String[] args) {
char c[] = { 'a', 'b', 'c' };
combine(c);
}
/**
* {a,b,c}三个数的组合共有(2^3)-1种可能,用二进制表示即001~111 其中0代表不存在,1代表存在 即001 为 c ;
* 010 为 b ... 111 为abc
* @param chs
* @Return: void
*/
private static void combine(char[] chs) {
final int len = chs.length;
final int temp = 1 << len;
List<Character> list = new ArrayList<Character>();
// 共有temp-1种可能,即001~111
for (int i = 1; i < temp; i++) {
int t;
for (int j = 0; j < len; j++) {
// 与运算,把001~111这七个数与1,2,4即(001,010,100)与运算,若不为0 说明对应该位数存在
t = 1 << j;
if ((t & i) != 0) {
list.add(chs[j]);
}
}
System.out.println(list.toString());
list.clear();
}
}
}