题目描述
- 得建立映射,其实用数组来建立也行,看起来还比较直观。
代码 & 思路
- 理好DFS的过程就行,整体思路不难
- 当递归字符length = 1时,递归结束
class Solution {public List<String> letterCombinations(String digits) {List<String> ans = new ArrayList<>();Map<Character, String> hashmap = new HashMap<>();hashmap.put('2', "abc");hashmap.put('3', "def");hashmap.put('4', "ghi");hashmap.put('5', "jkl");hashmap.put('6', "mno");hashmap.put('7', "pqrs");hashmap.put('8', "tuv");hashmap.put('9', "wxyz");if (digits.length() == 0) {return ans;}deal(hashmap, digits, new StringBuilder(), ans);return ans;}void deal(Map<Character, String> hashmap, String digits, StringBuilder nowString, List<String> ans) {if (digits.length() == 0) {ans.add(nowString.toString());return;}for (char ch : hashmap.get(digits.charAt(0)).toCharArray()) {deal(hashmap, digits.substring(1, digits.length()), new StringBuilder(nowString).append(ch), ans);}}
}
- 假设m为对应3个字母的数字的数量,n为对应4个字母的数字的数量
- 时间复杂度为O(3m3^m3m * 4n4^n4n),因为每种情况都要遍历到
- 空间复杂度O(m + n),构造的答案的长度