字符串的全排列和全组合

Posted smalljunjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的全排列和全组合相关的知识,希望对你有一定的参考价值。

输入:abc

输出:bac,cba,acb,bca,cab,abc

全排列的问题:

public ArrayList<String> Permutation(String str) {
        ArrayList<String> list = new ArrayList<String>();
        if(str!=null && str.length()>0){
             helper(str.toCharArray(),list,0);
             Collections.sort(list);
        }
        return list;
    }
    public void helper(char[] chars,ArrayList<String> list,int i) {
        if(i==chars.length-1) {
            list.add(String.valueOf(chars));
            return;
        }
        else
        {
            for(int j=i;j<chars.length;j++) {
                if(i==j||chars[i]!=chars[j]) {
                   swap(chars,i,j);
                   helper(chars,list,i+1);
                   swap(chars,j,i);
                }
            }
        }        
    }
    private void swap(char[] cs,int i,int j){
        char temp = cs[i];
        cs[i] = cs[j];
        cs[j] = temp;
    }

全组合:

public ArrayList<String> Comb(String str) {
        char[] chars = str.toCharArray();
        ArrayList<String> list = new ArrayList<String>();
        int combNum=1<<str.length();
        for(int i=1;i<combNum;i++) {
            StringBuffer temp=new StringBuffer(); 
            for(int j=0;j<str.length();j++) {
                int k=1<<j;
                if((k&i)!=0) {
                    temp.append(chars[j]);
                }
                
            }
            if(!list.contains(temp.toString()))
               list.add(temp.toString());
        }
        return list;
    }

打靶问题:

public int[] label= {0,1,2,3,4,5,6,7,8,9,10};
    public void Compute(int score,int num,ArrayList<Integer> list){
        if(score<0||score>(num+1)*10) return;
        if(num==0) {
            System.out.println(list);
        }
        for(int i=0;i<11;i++) {
            list.add(label[i]);
            Compute(score-label[i],num-1,list);
            list.remove(list.size()-1);            
        }
    }

 

以上是关于字符串的全排列和全组合的主要内容,如果未能解决你的问题,请参考以下文章

获取所有组合算法获取全排列算法(java)

全排列和全组合实现

你真的分清楚子序列和全排列了吗?建议收藏

算法学习——递归和排列组合

求字符串的全排列

有重复元素的全排列