17. 电话号码的字母组合(回溯算法)
生活随笔
收集整理的這篇文章主要介紹了
17. 电话号码的字母组合(回溯算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。
給出數字到字母的映射如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例 1:
輸入:digits = “23”
輸出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
輸入:digits = “”
輸出:[]
示例 3:
輸入:digits = “2”
輸出:[“a”,“b”,“c”]
提示:
0 <= digits.length <= 4
digits[i] 是范圍 [‘2’, ‘9’] 的一個數字。
這道題同樣是相同的回溯思路,主要不同的地方在于
這里的回溯函數不需要start了,需要一個index,這個index是記錄遍歷第幾個數字了,就是用來遍歷digits,當index和digits.size()相等時遞歸終止;
這道題目對應用能力考察的比較多,看到題目,就應該想到用一個string類的數組來將每個數字對應字母存起來,
調用每個數字對應字母時需要先從digits中找到對應數字,通過對應數字找到對應字符串,再進行for循環遍歷
這個套路其實和上一道題目77.組合差不多,不能說完全一樣,但是都是走的回溯的套路
代碼如下:
class Solution { private:const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs",// 7"tuv", // 8"wxyz",// 9}; public:vector<string> ans;string path;void backtracking(string digits, int index) {if (index == digits.size()) {ans.push_back(path);return ;}int digit = digits[index] - '0';string letter = letterMap[digit];for (char i : letter) {path.push_back(i);backtracking(digits, index + 1);path.pop_back();}}vector<string> letterCombinations(string digits) {if (digits.size() == 0) return ans;backtracking(digits, 0);return ans;} };總結
以上是生活随笔為你收集整理的17. 电话号码的字母组合(回溯算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 77. 组合(回溯算法)
- 下一篇: 131. 分割回文串(回溯算法)