【LeetCode】17. 電話號碼的字母組合
阿新 • • 發佈:2018-12-17
題目描述
給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例
輸入:“23”
輸出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
說明:
儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
解決方法
用迭代,排列組合的問題。思路:遍歷輸入的字串digits,取出對應的字母串,存入向量中,後存入的與前面的進行組合。
如,對於示例,首先將2對應的[a],[b],[c]放入res中,然後與3對應的def組合,依次放入[ad],[ae],[af]…
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
if (digits.size()==0) return res;
string dict[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
res.push_back("");
for (int i=0;i<digits. size();i++){
string str=dict[digits[i]-'2']; //取出數字對應的字母串
int n=res.size();
for (int j=0;j<n;j++){ //進行排列組合
string tmp=res.front(); //從向量中取出第一個元素並刪除
res.erase(res.begin());
for (int k=0;k<str.size();k++)
res. push_back(tmp+str[k]);
}
}
return res;
}
};