方法
算法思想: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;
}
}