电话号码有2 – 9。2上有abc…现在给出一串电话号码。求出所有的可能的字母组合。
如:23,则组合有:ad,ae,af等9种。
思路:这种带回溯的一看就用递归。细节上注意StringBuilder的用法和字符串遍历就行。
class Solution {
String[] alpha = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
String digits;
StringBuilder sb = new StringBuilder("");
ArrayList<String> ret = new ArrayList<String>();
public List<String> letterCombinations(String digits) {
if (digits.length() == 0) {
return ret;
}
this.digits = digits;
recursion(0);
return ret;
}
public void recursion(int idx) {
if (idx == digits.length()) {
ret.add(sb.toString());
return;
}
int number = digits.charAt(idx) - '2';
for (char ch : alpha[number].toCharArray()) {
sb.append(ch);
recursion(idx + 1);
sb.deleteCharAt(idx);
}
}
}