问题描述:输入一个字符串,打印出该字符串中字符的所有配型。你可以以任意顺序返回这个字符串数字,但是里面不能用重复元素。
由于该题中不允许有两个一样的元素,所以使用set进行去重,整体思路在于:定义一个used数组表征是否选取,从头开始遍历,若当前元素没有选择,则可以选取进入并进入下一层dfs循环中,当该dfs退出时,回退消除元素后进入下一个循环中,使用set来去除重复元素;
public void tranceback(String s,int[]used,String tempStr,Set<String>res)
{
if(tempStr.length()==s,length())
{
res.add(tempStr);
return;
}
for(int i=0;i<s.length();i++)
{
if(used[i]==false)
{
used[i]=true;
tranceBack(s,used,tempstr+s.charAt(i),res);
used[i]=false;
}else
{
continue;
}
}
}
public String [] TranceBack(String s)
{
Set<String>set=new HashSet<>();
Boolea []used=new Boolean[s.length()];
Arrays.fill(used,false);
tranceback(s,used,new String(""),set);
return set.toArray(new String[res.size()]);
}
知识点?set转数组res.toArray(new T[res.size()]);