解题思路
先建立数字到字母的映射表,按位置逐层递归,每层遍历当前数字对应的所有可选字母,填入路径对应位置后进入下一层,递归到底时直接将路径数组转为字符串加入结果,无需回溯撤销
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { private static final String[] MAPPING = new String[]{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; private List<String> res = new ArrayList<>(); private char[] path;
public List<String> letterCombinations(String digits) { int len = digits.length(); if(len == 0) { return res; } path = new char[len]; dfs(0, digits.toCharArray()); return res; }
private void dfs(int i, char[] digits) { if(i == digits.length) { res.add(new String(path)); return; } String str = MAPPING[digits[i] - '0']; for(int j = 0; j < str.length(); j ++) { path[i] = str.charAt(j); dfs(i + 1, digits); } } }
|