Given a string containing digits from 2-9
inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example:
Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
题目链接:https://leetcode.com/problems/letter-combinations-of-a-phone-number/
题目分析:水DFS
0ms,时间击败100%,空间击败89.3%
class Solution {
public static int[] mp = new int[10];
static {
int st = 0;
for (int i = 2; i <= 9; i++) {
mp[i] = st;
st += 3;
if (i == 7 || i == 9) {
st++;
}
}
}
public void DFS(int pos, String digits, StringBuilder cur, List<String> ans) {
if (pos == digits.length()) {
ans.add(cur.toString());
return;
}
int x = digits.charAt(pos) - '0';
int len = (x == 7 || x == 9) ? 4 : 3;
for (int i = mp[x]; i < mp[x] + len; i++) {
cur.append((char)('a' + i));
DFS(pos + 1, digits, cur, ans);
cur.deleteCharAt(cur.length() - 1);
}
}
public List<String> letterCombinations(String digits) {
List<String> ans = new ArrayList<>();
if (digits.length() == 0) {
return ans;
}
DFS(0, digits, new StringBuilder(""), ans);
return ans;
}
}