Java用位图的思路实现组合

假设一共有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();
            }
        }

    }
发布了82 篇原创文章 · 获赞 49 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xu505928168/article/details/101160343
今日推荐