17. Letter Combinations of a Phone Number(bfs,回溯)
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.
回溯
class Solution { public: const string letterMap[10] = { "", // 0 "", // 1 "abc", // 2 "def", // 3 "ghi", // 4 "jkl", // 5 "mno", // 6 "pqrs", // 7 "tuv", // 8 "wxyz", // 9 }; vector<string> res; void backtrack(string& digits, string& path, int start) { if(path.size()==digits.size()) { res.push_back(path); return; } for (int i = start; i< digits.size(); ++i) { int index = digits[i] - '0'; string cur_s = letterMap[index]; for(int j = 0; j < cur_s.size() ; ++j) { path.push_back(cur_s[j]); backtrack(digits,path,i + 1); path.pop_back(); } } } vector<string> letterCombinations(string digits) { string path = ""; if (digits=="") return res; backtrack(digits,path,0); return res; } };
1 class Solution { 2 public List<String> letterCombinations(String digits) { 3 LinkedList<String> res = new LinkedList<String>(); 4 if(digits.isEmpty()) return res; 5 String[] mapping = new String[] {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 6 res.add(""); 7 for(int i=0;i<digits.length();i++){ 8 int x=Character.getNumericValue(digits.charAt(i)); 9 while(res.peek().length()==i){ 10 String t = res.remove(); 11 for (char s :mapping[x].toCharArray()) 12 res.add(t+s); 13 } 14 } 15 return res; 16 } 17 }