解题思路
两次递归:首次递归到底后,进行大小写转换,再次递归,共递归两次;若此处为数字则只递归一次
代码
class Solution {
public:
vector<string> ans;
vector<string> letterCasePermutation(string s) {
dfs(s,0);
return ans;
}
void dfs(string s,int pos)
{
if(pos == s.length())
{
ans.push_back(s);
return;
}
dfs(s,pos+1); //首次递归
if(s[pos]>='a' && s[pos]<='z') //小写变大写
s[pos] -= 32;
else if(s[pos]>='A' && s[pos]<='Z') //大写变小写
s[pos] += 32;
else //如果是数字的话就递归一次,此时不再继续递归
return;
dfs(s,pos+1); //如果是字母就大小写转换后再次递归
}
};