题目:
Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.
Examples: Input: S = "a1b2" Output: ["a1b2", "a1B2", "A1b2", "A1B2"] Input: S = "3z4" Output: ["3z4", "3Z4"] Input: S = "12345" Output: ["12345"]
Note:
S
will be a string with length at most12
.S
will consist only of letters or digits.
思路:
一道简单的DFS+BackTracking的题目,需要注意的是在这里,我们无法像原来那样通过构造新的字符串来实现,因为S是字母和数组混合在一起的。我们采用的方法是直接对原始字符串S进行修改。
代码:
class Solution {
public:
vector<string> letterCasePermutation(string S) {
vector<string> ret;
backtracking(S, 0, ret);
return ret;
}
private:
void backtracking(string &S, int i, vector<string> &ret) {
if (i == S.length()) {
ret.push_back(S);
return;
}
backtracking(S, i + 1, ret);
if (isalpha(S[i])) {
S[i] = isupper(S[i]) ? tolower(S[i]) : toupper(S[i]);
backtracking(S, i + 1, ret);
}
}
};