46 回溯算法解字符串的排列

发布时间:2023年12月20日

问题描述:输入一个字符串,打印出该字符串中字符的所有配型。你可以以任意顺序返回这个字符串数字,但是里面不能用重复元素。

由于该题中不允许有两个一样的元素,所以使用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()]);

文章来源:https://blog.csdn.net/qq_52299902/article/details/135113764
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。