问题描述
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
例:
输入:S = “qwe”
输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”]
(来源:力扣(LeetCode))
问题分析
采用回溯算法,对决策树进行深度优先搜索
代码
List<String> returnList=new ArrayList();
public String[] permutation(String S) {
String singleStr=""; //单个子字符串
backtrack(S,singleStr); //回溯
return returnList.toArray(new String[returnList.size()]);
}
public void backtrack(String s,String singleStr){
if(s.length()==singleStr.length()){ //子字符串找满就终止
returnList.add(singleStr);
return ;
}
for(int i=0;i<s.length();i++){
String key=s.substring(i,i+1); //将字符串单个截出来做判断
if(singleStr.contains(key))
continue;
singleStr+=key;
backtrack(s,singleStr); //向下搜索,添加字符
singleStr=singleStr.substring(0,singleStr.length()-1); //往回撤一步
}
}