输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
//本质还是回溯的思想;这里设置了一个flag数组,用来标识字符是否被访问过;
//有一点就是 将 set或者是List转化为数组,这里使用了 res.toArray(new String[0]); 这里就是使用了一个toArray()函数,其参数使用了 new String[0];表示要将其转化为string数组;
Set<String> res=new HashSet<>();
public String[] l38(String s){
backpack(s.toArray(),new int[s.length()],new StringBuilder());
return res.toArray(new String[0]);
}
public void backpack(char[] chars,int[] flag,StringBuilder sb){
if(sb.length==chars.length())
{
res.add(sb.toString());
return;
}
for(int i=0;i<chars.length;i++){
if(flag[i]==1) continue;
sb.append(chars[i]);
flag[i]=1;
backpack(chars,flag,sb);
sb.deleteCharAt(sb.length()-1);
flag[i]=0;
}
}