17. 電話號碼的字母組合
描述
- 給定一個僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。
- 給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對應(yīng)任何字母。
- 1-NULL, 2-abc, 3-def, 4-ghi, 5-jkl, 6-mno, 7-pqrs, 8-tuv, 9-wxyz
示例
- 輸入:"23"
- 輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
說明
- 盡管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
思路
- 回溯算法,利用循環(huán)加遞歸實現(xiàn),每次循環(huán)取該數(shù)字對應(yīng)的一個字母,然后遞歸下一個數(shù)字,當遞歸到最后一個數(shù)字時,將結(jié)果保存,然后回溯。
- 小技巧:
1)char -> int 可以通過 “ - ‘0’ ” 操作實現(xiàn)
2)將一個 char 加到 string 上可利用 string.push_back() 或者 += 實現(xiàn)
class Solution_17 {
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {};
vector<string> ret;
string str;
_letterCombinations(digits, 0, str, ret);
return ret;
}
void _letterCombinations(string& digits, int index, string& str,
vector<string>& ret) {
if (index == digits.size()) {
ret.push_back(str);
return;
}
for (int i = 0; i < numAlpTable[digits[index] - '0'].size(); ++i) {
str.push_back(numAlpTable[digits[index] - '0'][i]);
_letterCombinations(digits, index + 1, str, ret);
str.pop_back();
}
}
private:
vector<string> numAlpTable = {"", "", "abc", "def", "ghi",
"jkl", "mno", "pqrs", "tuv", "wxyz"};
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。