当前位置: 代码迷 >> 综合 >> 面试题38. 字符串的排列
  详细解决方案

面试题38. 字符串的排列

热度:16   发布时间:2024-02-11 22:40:03.0

 方法
算法思想:dfs+交换。。。。。。。。。。。。。。。。。。
时间复杂度:O(N!)
空间复杂度:O(N2)
边界条件:
补充知识:

class Solution {

    List<String> res=new LinkedList<>();            //结果

       char[] c;

    public String[] permutation(String s) {

       c=s.toCharArray();                                       //

       dfs(0);                                                           //开始dfs

       return res.toArray(new String[res.size()]);  //就这样定义

    }

 

    void dfs(int x){

        if(x==c.length-1)                                          //length??最后一位不看

        {

            res.add(String.valueOf(c));              //String.ValueOf

            return ;

        }

        HashSet<Character> set=new HashSet<>();          //去重?

        for(int i=x;i<c.length;i++){

            if(set.contains(c[i])) continue;                                //去重eg:abb

            set.add(c[i]);                                                            

            swap(i,x);                                                        //交换01 ,02,03

            dfs(x+1);                                                    //下一位

            swap(i,x);                                                   //换回

        }

    }

    void swap(int i,int j){

        char tmp=c[i];

        c[i]=c[j];

        c[j]=tmp;

 

    }

}

  相关解决方案