1. 程式人生 > 實用技巧 >Leetcode784.字母大小寫全排列

Leetcode784.字母大小寫全排列

題意

給定一個字串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;
    }
};