假设一共有n个字符,则可能的组合结果共有2^n-1种。 以输入3个字符a、b、c为例: 3个字符,可以用3个位来表示,从右到左的每一位分别用来代表a、b、c,该位为1表示取该元素,该位为0表示不取该元素。例如如组合a表示为001,组合b表示为010,组合ac表示为101,组合abc表示为111,而000是没有意义的,所以总共的结果就是2^n-1种。
因此,我们可以从值1开始循环到2^n-1,输出每个值所代表的组合即可。
public static void Permutation(char[] c){
for(int i=1;i<(Math.pow(2,c.length));i++){
for(int j=0;j<c.length;j++){
if((i&(1<<j))>0){//判断每一位是否有
System.out.print(c[j]);
}
}
System.out.println();
}
}
一般思路
//targ剩余个数 has已经加入的个数 cur当前数组坐标
private static void f(int[] shu, int targ, int has, int cur) {
if(has == targ) {
System.out.println(stack);
return;
}
for(int i=cur;i<shu.length;i++) {
if(!stack.contains(shu[i])) {
stack.add(shu[i]);
f(shu, targ, has+1, i);
stack.pop();
}
}
}