思路
首先要根据输入的数字得到对应的字符串。
然后用回溯算法的三步。
1.确定递归函数的参数
两个参数是输入的数字,和字符串数组,然后还需要一个参数来记录当前是在处理第几个数字。
2.递归终止条件
当结果字符串的长度等于处理的数字的个数时,表示递归结束。将结果存入到结果中。
3.单层处理逻辑
单层递归就是向path中加入字符,然后处理下一个数字,最后回溯把最后一个字符删除。
代码
class Solution {
List<String> res = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if (digits == null || digits.length() == 0) {
return res;
}
String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
fun(digits,numString,0);
return res;
}
StringBuilder path = new StringBuilder();
public void fun(String digits,String[] numString,int nums){
if(nums==digits.length()){
res.add(path.toString());
return;
}
int intDigits = digits.charAt(nums)-'0';//获得单个int数字
String str = numString[intDigits];//得到对应的三个字符
for(int i = 0;i<str.length();i++){
path.append(str.charAt(i));
fun(digits,numString,nums+1);
path.deleteCharAt(path.length()-1);
}
}
}
|