题目
- 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母
- 示例
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
解法
private static List<String> findTelNumberCombination(String str) {
List<String> resultList=new ArrayList<>();
if (str==null||str.isEmpty())return resultList;
StringBuilder builder=new StringBuilder();
String[] numberStrings={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
findValidCombination(str,numberStrings,builder,resultList,0);
return resultList;
}
/**
*
* @param str
* @param builder
* @param resultList
* @param index
*/
private static void findValidCombination(String str, String[]numberStrings,StringBuilder builder, List<String> resultList, int index) {
// 递归退出条件
if (index==str.length()){
resultList.add(builder.toString());
return;
}
// 获取号码位置
int pos=str.charAt(index)-'0';
// 获取对应字符
String numberStr=numberStrings[pos];
// 拼接
for (int i=0,len=numberStr.length();i<len;i++){
builder.append(numberStr.charAt(i));
findValidCombination(str,numberStrings,builder,resultList,index+1);
// 删除无效元素
builder.deleteCharAt(builder.length()-1);
}
}