一個人搞得定網(wǎng)站建設(shè)網(wǎng)絡(luò)seo優(yōu)化公司
題目描述:
給定一個字符串?s
?,通過將字符串?s
?中的每個字母轉(zhuǎn)變大小寫,我們可以獲得一個新的字符串。
返回?所有可能得到的字符串集合?。以?任意順序?返回輸出。
示例 1:
輸入:s = "a1b2" 輸出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
輸入: s = "3z4" 輸出: ["3z4","3Z4"]
提示:
1 <= s.length <= 12
s
?由小寫英文字母、大寫英文字母和數(shù)字組成
題目鏈接:
. - 力扣(LeetCode)
解題主要思路:
其實(shí)這題很簡單,遍歷string中的每個元素,每次遍歷的時候分兩步走,一步是不需要進(jìn)行大小寫轉(zhuǎn)換,這次直接插入char元素,然后進(jìn)入下一次遍歷;另一步是進(jìn)行大小寫轉(zhuǎn)換,不過需要注意的是,如果在進(jìn)行大小寫轉(zhuǎn)換的時候,發(fā)現(xiàn)需要轉(zhuǎn)換的元素是數(shù)字的話,那就直接跳過,不需要任何改動,也不需要記錄,否則ret中會出現(xiàn)多余的string,因?yàn)?“不需要進(jìn)行大小寫轉(zhuǎn)換” 這一步已經(jīng)幫我們做了該做的事。
解題代碼:
class Solution {
public:vector<string> ret;string path;vector<string> letterCasePermutation(string s) {dfs(s, 0);return ret;}void dfs(string& s, int pos){// 結(jié)束條件if (path.size() == s.size()) {ret.push_back(path);return;}char c = s[pos];// 不改變path.push_back(c);dfs(s, pos+1);path.pop_back(); // 回溯// 改變if (!(c >= '0' && c <= '9')) {// 數(shù)字的話不用管if (c >= 'a' && c <= 'z') c -= 32;else c += 32;path.push_back(c);dfs(s, pos+1);path.pop_back(); }}
};