回溯解题思路:
1.先把0到9的对应的字符串用一个string类型的数组来储存起来,之后写回溯函数,组合的终止条件为s.length()==digits.length(),同时也要防止i下标超出string类型digits中的索引范围 ,之后就是找到对影数字的字符串的下标,用for循环来进行遍历组合,达到组合长度后,进行回溯操作。
class Solution {
//接收的全部的字母组合
List<String> li=new ArrayList<>();
//接收单个字母组合
String s="";
public List<String> letterCombinations(String digits) {
//把0到9对应的值存入到string类型的数组中
String[] st={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//如果输入值为0直接返回空数组
if(digits.length()==0){
return li;
}
//调用回溯函数
huisu(0,st,digits);
return li;
}
public void huisu(int i,String[] st,String digits){
//组合的终止条件
if(s.length()==digits.length()){
li.add(s);
return ;
}
//防止i下标超出string类型digits中的索引范围
if(i==digits.length()){
return;
}
//找到对应数字的字符串下标
int j=Integer.parseInt(""+digits.charAt(i));
//for循环来进行遍历
for(int k=0;k<st[j].length();k++){
//把对应数字的字符串中的值加入到接收单个字母组合中
s+=st[j].charAt(k);
//进行递归来遍历全部的组合
huisu(i+1,st,digits);
//达到组合长度后,进行回溯操作
s=s.substring(0, s.length()-1);
}
}
}