LeetCode No17. 電話號碼的字母組合
阿新 • • 發佈:2022-04-21
題目
給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。
給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例 1:
輸入:digits = "23"
輸出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
輸入:digits = ""
輸出:[]
示例 3:
輸入:digits = "2"
輸出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是範圍 ['2', '9'] 的一個數字。
思路
其實就是一個全排列的問題,資料範圍也不大,打表記好每個數字對應的字元,直接一波回溯即可。
AC程式碼
點選檢視程式碼
class Solution { List<String> list; char[] chars; StringBuffer sb; Map<Character, Character[]> map = new HashMap<>(){{ put('2', new Character[]{'a', 'b', 'c'}); put('3', new Character[]{'d', 'e', 'f'}); put('4', new Character[]{'g', 'h', 'i'}); put('5', new Character[]{'j', 'k', 'l'}); put('6', new Character[]{'m', 'n', 'o'}); put('7', new Character[]{'p', 'q', 'r', 's'}); put('8', new Character[]{'t', 'u', 'v'}); put('9', new Character[]{'w', 'x', 'y', 'z'}); }}; private void DFS(int index) { if( index==chars.length) { list.add(sb.toString()); return ; } Character[] ch = map.get(chars[index]); for(char cha: ch) { sb.append(cha); DFS(index+1); sb.deleteCharAt(sb.length()-1); } } public List<String> letterCombinations(String digits) { list = new ArrayList<>(); if(digits.length()==0) { return list; } chars = digits.toCharArray(); sb = new StringBuffer(); DFS(0); return list; } }