Leetcode784.字母大小寫全排列
阿新 • • 發佈:2020-09-02
題意
給定一個字串S,通過將字串S中的每個字母轉變大小寫,我們可以獲得一個新的字串。返回所有可能得到的字串集合。
思路
- 對於回溯題目畫出它的遞迴樹是最好分析的。可以看出1⃣️如果是數字,直接將數字加到當前儲存結果的字串
str
裡,2⃣️如果是字母,那麼要擴充套件2個結點,分別是它的大寫字母和小寫字母。這樣最後遞迴到葉子結點就得到了一個解。遞迴樹如下圖所示
程式碼
class Solution { public: vector<string> ans; //index為str字串的長度 void backtrace(string& str, string& S, int index) { if(index == S.size()) { ans.push_back(str); return; } if(isdigit(S[index])) { str.push_back(S[index]); backtrace(str, S, index + 1); str.pop_back(); } if(isalpha(S[index])) { //分別擴充套件小寫字母,大寫字母 str.push_back(tolower(S[index])); backtrace(str, S, index + 1); str.pop_back(); str.push_back(toupper(S[index])); backtrace(str, S, index + 1); str.pop_back(); } } vector<string> letterCasePermutation(string S) { if(S.size() == 0) return {}; string path = ""; backtrace(path, S, 0); return ans; } };