全排列

两种方法:
第一种方法:
递归:

  • 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,
  • 从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例:
  • 固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac
  • 固定b,求后面ac的排列:bac,bca,求好后,c放到第一位置,得到cba
  • 固定c,求后面ba的排列:cba,cab。
  • 即递归树:
         str:   a      b        c
            ab ac    ba bc      ca cb
      result: abc acb    bac bca    cab cba
    */
    //如果有重复元素,将结果存到hashSet中去重
public class Permutation {
    public static void permutation(String str,String result){
        if(result.length()==str.length()){
            System.out.println(result);
        }else{
            for(int i=0;i<str.length();i++){
                if(result.indexOf(str.charAt(i))<0){
                    permutation(str,result+str.charAt(i));
                }
            }
        }
    }
    public static void main(String[] args){
        String str="abc";
        String result="";
        permutation(str,result);
    }       
}

第二种方法:
/*递归另一种写法:
从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,

  • 从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例:
  • 固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac
  • 固定b,求后面ac的排列:bac,bca,求好后,c放到第一位置,得到cba
  • 固定c,求后面ba的排列:cba,cab。
public class Pass { 
     HashSet<String> set = new HashSet<String>();
     public void Permutation(char[] c,int begin){
            if(c.length==0)
                return;
            if(begin==c.length-1){
                System.out.println(c);
            }else{
                for(int i=begin;i<c.length;i++){                
                        Swap(c,i,begin);
                        Permutation(c,begin+1);//固定好当前一位,继续排列后面的
                        Swap(c,i,begin);                                                                
                }
            }           
        }
    public void Swap(char[] c,int i,int begin){
        if(i!=begin){
            char temp=c[i];
            c[i]=c[begin];
            c[begin]=temp;
        }       
    }       
    public static void main(String[] args) {
        Pass ps=new Pass();
        char[] c={'a','b','c'};
        ps.Permutation(c,0);
    }  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容