- 例如给定一些字符串或者数字,要求返回他们重复或者不重复的组合,这就是全排列的问题,其他类型可以是该问题的变种,例如电话号码的字母组合
- 解决思路:使用深度搜索加回溯,也就是利用递归加回溯的方法,遍历所有集合,如果找到符合要求的(一般是长度相等),就可以压进全局变量中,最后返回
- 模板:
List<String> output;//全局变量,保存搜索结果
StringBuffer str;//记录当前搜索的结果,类型根据题目确定
String ds;
public List<String> letterCombinations(String digits) {
output = new ArrayList<>();//初始化
if(digits.length()==0)return output;//边界值确定
str = new StringBuffer();//初始化
ds = digits;
dfs(0);//进行深度搜索回溯
return output;
}
private void dfs(int curLen){
if(str.length()==ds.length()){
output.add(str.toString());//首先进行长度判断,如果相等,这说明搜索到尽头,入栈
return;
}
for(char c:reflect[ds.charAt(curLen)-'2'].toCharArray()){//对要全排列的对象进行循环查找
str.append(c);//加入搜索结果
dfs(curLen+1);//向前搜索
str.deleteCharAt(str.length()-1);//剔除掉dfs加进来的东西,因为下一次循环要重新开始了
}
return;
}