给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
java
public List<String> letterCombinations(String digits) {
if (digits == null || digits.length() == 0) {
return result;
}
int index=0; //记录遍历digits的角标
//初始对应所有的数字,为了直接对应2-9,新增了两个无效的字符串
String[] str = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
backtracking(str,digits,index);
System.out.println(result);
return result;
}
//回溯算法
public void backtracking(String[] str,String digits,int index){
//1.确定回溯中止条件
if(index==digits.length()){
result.add(path.toString());
return;
}
//2.写回溯主体
int digitsIndex=digits.charAt(index)-'0'; //通过减去'0',得到digits中index对应的角标
String s=str[digitsIndex];
for(int i=0;i<s.length();i++){
path.append(s.charAt(i)); //将遍历字符拼接起来
backtracking(str,digits,index+1);
path.deleteCharAt(path.length()-1); //回溯算法关键一步,删掉最后一个元素
}
}