电话号码按键上,每个数字对应着3到4个字母, 现给出几个数字,输出它们对应的字母的所有组合。
思路: DFS 取出第1个数,找到它对应的字母, 然后按顺序取出字母,和下一个数字的所有字母组合, 当字母数和号码的长度相等时,把结果放进list。
注意有字母的号码是从2开始的。
class Solution {
List<String> res = new ArrayList<>();
int n = 0;
String[] letters;
public List<String> letterCombinations(String digits) {
n = digits.length();
if(n == 0) return res;
StringBuilder sb = new StringBuilder();
letters = new String[] {
"abc", "def", "ghi", "jkl",
"mno", "pqrs", "tuv", "wxyz"
};
dfs(0, digits, sb);
return res;
}
void dfs(int id, String digits, StringBuilder sb) {
if(sb.length() == n) {
res.add(sb.toString());
return;
}
String str = letters[digits.charAt(id) - '2'];
for(int i = 0; i < str.length(); i++) {
sb.append(str.charAt(i));
dfs(id + 1, digits, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
}
|