全排列

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

  • 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,
  • 从而得到所有元素的全排列。以对字符串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

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

  • 从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例:
  • 固定a,求后面bc的排列:abc,acb,求好后,a和b交换,得到bac
  • 固定b,求后面ac的排列:bac,bca,求好后,c放到第一位置,得到cba
  • 固定c,求后面ba的排列:cba,cab。
public class Pass { 
     HashSet set = new HashSet();
     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

你可能感兴趣的:(全排列)