一.題目連接:git
https://leetcode.com/problems/letter-combinations-of-a-phone-number/數組
二.題目大意:code
給定一段數字字符串,其中每一個數字字符對應了以下的字母字符,求出輸入字符串對應的全部可能的字母字符串集合。blog
例如,輸入數字字符串"23",其對應的全部可能的字母字符串集合爲 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]leetcode
三.題解:字符串
這道題目直接根據題意來作便可,至關於每一個數字字符對應若干個字母字符,把這些全部可能的字母組合存儲起來便可,本體代碼以下 (本題的思想不難理解,關鍵是這個實現的過程,須要仔細琢磨下):get
class Solution { public: vector<string> letterCombinations(string digits) { string dic[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector<string> res; if(digits == "") return res; res.push_back("");//初始化結果數組 int d_len = digits.size(); for(int i = 0; i < d_len; i++) { vector<string> tmp;//用於擴充結果的中間變量 string str = dic[digits[i] - '0']; if(str == "") continue; for(int j = 0 ; j < str.size(); j++) for(int k = 0; k < res.size(); k++) tmp.push_back(res[k] + str[j]);//對res數組的每一個元素附上新的字母字符 res = tmp;//每次中間處理完以後,交換結果 } return res; } };
注意:string
1.當輸入的數字字符串爲空時,最終返回的字符字符串集合爲空,因此這裏須要特判一下。it
2.初始時res數組必須有一個「」,這樣作的目的是爲了方便後續將res數組進行擴充,由於後續的擴充操做實際上就是在res數組原有的每一個元素基礎上附加上新的字母字符,而且這個過程由tmp數組來實現,最終將tmp數組的結果賦值給res數組做爲最終的結果。io