递归 深搜 回溯
题目一. 字⺟⼤⼩写全排列
1. 题⽬链接:
https://leetcode.cn/problems/letter-case-permutation/
2. 题⽬描述:
3. 解法:
算法思路:
只需要对英⽂字⺟进⾏处理,处理每个元素时存在三种情况:
(1). 不进⾏处理;
(2). 若当前字⺟是英⽂字⺟并且是⼤写,将其修改为⼩写;
(3). 若当前字⺟是英⽂字⺟并且是⼩写,将其修改为⼤写。
从前往后按序进⾏递归,递归流程如下:
递归结束条件:当前需要处理的元素下标越界,表⽰处理完毕,记录当前状态并返回;
对当前元素不进⾏任何处理,直接递归下⼀位元素;
判断当前元素是否为⼩写字⺟,若是,将其修改为⼤写字⺟并递归下⼀个元素,递归结束时撤销修 改操作;
判断当前元素是否为⼤写字⺟,若是,将其修改为⼩写字⺟并递归下⼀个元素,递归结束时撤销修 改操作
4.代码
class Solution
{
StringBuffer path;
List<String> ret;
public List<String> letterCasePermutation(String s)
{
path = new StringBuffer();
ret = new ArrayList<>();
dfs(s, 0);
return ret;
}
public void dfs(String s, int pos)
{
if(pos == s.length())
{
ret.add(path.toString());
return;
}
char ch = s.charAt(pos);
// 不改变
path.append(ch);
dfs(s, pos + 1);
path.deleteCharAt(path.length() - 1