😄😊😆😃😄😊😆😃
開始cpp刷題之旅。
目標:執行用時擊敗90%以上使用 C++ 的用戶。
17. 電話號碼的字母組合
給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。
給出數字到字母的映射如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例 1:
輸入:digits = “23”
輸出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
輸入:digits = “”
輸出:[]
示例 3:
輸入:digits = “2”
輸出:[“a”,“b”,“c”]
解題:
借代碼隨想錄的一張圖,這題目的意思大概就是如下這樣的。
幾個數字就有幾層。
我們要收集的結果,就是[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]
對與n個不定的for循環,我們可以采用回溯。
如“23”,先推入2中的a,再將3中的d、e、f推推入結果中,要不斷的推入、保存、刪除,
當取完3中的字符,再取出字符a,再推入字符b,再重復同樣的動作。到2中的字符取完為止。
class Solution {
public:vector<string>str;string s;//定義string類型數組,將0和1沒有字符的數字表示為空字符。const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};void backtracking(const string& digits, int index){if(digits.size()==index){str.push_back(s);return;}int digit = digits[index] - '0'; //字符轉數字string letters = letterMap[digit]; //取出索引對應的字符串for(int i=0;i<letters.size();i++){s.push_back(letters[i]); //推入字符backtracking(digits,index+1); //遞歸重復進行此動作s.pop_back(); //取出字符,開始推入下一個字符。}}vector<string> letterCombinations(string digits) {if (digits.size() == 0) {return str;}backtracking(digits,0);return str;}
};
提交記錄: