# 【LeetCode】 17. Letter Combinations of a Phone Number ## Description > 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. > Note: Although the above answer is in lexicographical order, your answer could be in any order you want. > 給一串包含數字 2-9 的字串,回傳所有可能出現的字母組合。 > 每個數字到字母的對應表在下方(就像手機按鈕一樣),記住1沒有對應到任何字母。 > 注意: > 雖然範例中的答案有按字典排序,但實際上你可以用任何順序。 ![](https://i.imgur.com/noF72OR.png) ## Example: ``` Example: Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. ``` ## Solution * 用一個`vector<string>`當作對應表,1的部分放入空字串就可以了。 * 每次放入一個字母,用迴圈去放下一種字母(同一個按鈕);用遞迴去放下一個字母(下一個按鈕)。 * 注意如果輸入是空的,不可回傳任何空字串。 ### Code ```C++=1 class Solution { public: void addLetter(string dights, string word, vector<string>& ans) { vector<string> btn = {"", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; if(dights.empty()) { if(!word.empty()) ans.push_back(word); } else { for(int i = 0; i < btn[dights[0] - '1'].size(); i++) { addLetter(dights.substr(1), word + btn[dights[0] - '1'][i], ans); } } } vector<string> letterCombinations(string digits) { vector<string> ans; addLetter(digits, string(), ans); return ans; } }; ``` ###### tags: `LeetCode` `C++`