个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客
个人专栏
力扣递归算法题
【C++】? ??
数据结构与算法
前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的 ?
我讲述题目会把讲解部分分为3个部分:
1、题目解析
2、算法原理思路讲解
3、代码实现
题目链接:字母大小写全排列
题目
给定一个字符串?s
?,通过将字符串?s
?中的每个字母转变大小写,我们可以获得一个新的字符串。
返回?所有可能得到的字符串集合?。以?任意顺序?返回输出。
示例 1:
输入:s = "a1b2" 输出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
输入: s = "3z4" 输出: ["3z4","3Z4"]
提示:
1 <= s.length <= 12
s
?由小写英文字母、大写英文字母和数字组成s
?s
?中的每个字母转变大小写,我们可以获得一个新的字符串。示例 1:
输入:s = "a1b2" 输出:["a1b2", "a1B2", "A1b2", "A1B2"]
一、画出决策树
决策树就是我们后面设计函数的思路
二、设计代码
(1)全局变量
string path;
vector<string> ret;
(2)设计递归函数
void dfs(string s, int pos); // 表示现在要处理的元素的下标
以上思路讲解完毕,大家可以自己做一下了
class Solution {
public:
string path;
vector<string> ret;
void dfs(string s, int pos) // 表示现在要处理的元素的下标
{
if (path.size() == s.size())
{
ret.push_back(path);
return;
}
if (s[pos] >= '0' && s[pos] <= '9')
{
path.push_back(s[pos]);
dfs(s, pos + 1);
path.pop_back();
}
else
{
if (s[pos] >= 'a' && s[pos] <= 'z')
{
path.push_back(s[pos]);
dfs(s, pos + 1);
path.pop_back();
path.push_back(s[pos]-32);
dfs(s, pos + 1);
path.pop_back();
}
else
{
path.push_back(s[pos]);
dfs(s, pos + 1);
path.pop_back();
path.push_back(s[pos] + 32);
dfs(s, pos + 1);
path.pop_back();
}
}
}
vector<string> letterCasePermutation(string s)
{
dfs(s, 0);
return ret;
}
};