1. 程式人生 > >LeetCode 17 — Letter Combinations of a Phone Number(電話號碼的字母組合)

LeetCode 17 — Letter Combinations of a Phone Number(電話號碼的字母組合)

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.

翻譯
給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。

示例:
輸入:“23”
輸出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
說明:
儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。

分析
由於不知道有幾個字元,所以用遞迴來做是最好理解的了,相當於套了n重的for迴圈。

c++實現

class Solution {
public:
    vector<string> res;
    
    vector<
string> letterCombinations(string digits) { if (digits == "") return res; zuhe(digits,0,""); return res; } void zuhe(string digits,int i,string s) { if (i == digits.length()) { res.push_back(s); return; } if
(digits[i] == '2') { zuhe(digits,i+1,s+"a"); zuhe(digits,i+1,s+"b"); zuhe(digits,i+1,s+"c"); return; } if (digits[i] == '3') { zuhe(digits,i+1,s+"d"); zuhe(digits,i+1,s+"e"); zuhe(digits,i+1,s+"f"); return; } if (digits[i] == '4') { zuhe(digits,i+1,s+"g"); zuhe(digits,i+1,s+"h"); zuhe(digits,i+1,s+"i"); return; } if (digits[i] == '5') { zuhe(digits,i+1,s+"j"); zuhe(digits,i+1,s+"k"); zuhe(digits,i+1,s+"l"); return; } if (digits[i] == '6') { zuhe(digits,i+1,s+"m"); zuhe(digits,i+1,s+"n"); zuhe(digits,i+1,s+"o"); } if (digits[i] == '7') { zuhe(digits,i+1,s+"p"); zuhe(digits,i+1,s+"q"); zuhe(digits,i+1,s+"r"); zuhe(digits,i+1,s+"s"); return; } if (digits[i] == '8') { zuhe(digits,i+1,s+"t"); zuhe(digits,i+1,s+"u"); zuhe(digits,i+1,s+"v"); return; } if (digits[i] == '9') { zuhe(digits,i+1,s+"w"); zuhe(digits,i+1,s+"x"); zuhe(digits,i+1,s+"y"); zuhe(digits,i+1,s+"z"); return; } } };