LeetCode——17. Letter Combinations of a Phone Number
阿新 • • 發佈:2018-12-11
一.題目連結:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/
二.題目大意:
給定一段數字字串,其中每個數字字元對應瞭如下的字母字元,求出輸入字串對應的所有可能的字母字串集合。
例如,輸入數字字串"23",其對應的所有可能的字母字串集合為 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
三.題解:
這道題目直接根據題意來做即可,相當於每個數字字元對應若干個字母字元,把這些所有可能的字母組合儲存起來即可,本體程式碼如下 (本題的思想不難理解,關鍵是這個實現的過程,需要仔細琢磨下
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; } };
注意:
1.當輸入的數字字串為空時,最終返回的字元字串集合為空,所以這裡需要特判一下。
2.初始時res陣列必須有一個“”,這樣做的目的是為了方便後續將res陣列進行擴充,因為後續的擴充操作實際上就是在res陣列原有的每個元素基礎上附加上新的字母字元,並且這個過程由tmp陣列來實現,最終將tmp陣列的結果賦值給res陣列作為最終的結果。