解题思路:排列组合+递归求解,递归每一位,当递归到最后一位的时候则添加字符串
class Solution {
Map<Character, String> map = new HashMap();
// 构建键盘按键
{
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
}
List<String> ans = new ArrayList();
public List<String> letterCombinations(String digits) {
if (digits == null || digits.length() == 0) return new ArrayList();
// 处理的标识位置
int index = 0;
// 动态构造字符串
StringBuilder sb = new StringBuilder();
// 递归处理
doFunction(digits, sb, index);
return ans;
}
void doFunction(String digits, StringBuilder sb, int index) {
if (index == digits.length()) {
ans.add(sb.toString());
return;
}
// 处理第几个输入数字
char ch = digits.charAt(index);
char[] ss = map.get(ch).toCharArray();
for (char c : ss) {
sb.append(c);
// 处理下一个字符
doFunction(digits, sb, index + 1);
sb.deleteCharAt(sb.length() - 1);
}
}
}
Q.E.D.