2025年--Lc293-784. 字母大小写全排列(回溯)--java版

1.题目

2.思路

深度优先遍历(回溯)



补充:大小写字符转换

charArray[index] ^= 1 << 5;

大写字符与其对应的小写字符的 ASCII 的差为 32,32 这个值如果敏感的话,它是 2

5

,在编程语言中,可以表示为 1 << 5。而

变换大小写这件事等价于:

如果字符是小写字符,减去 32 得到大写字符;

如果字符是大写字符,加上 32 得到小写字符。

而这两者合并起来,就是给这个字符做一次不进位的加法,即异或上 1 << 5

补充2:

char[] ch:当前正在操作的状态/路径载体(我们在 ch 上改大小写)

int index:当前决策到第几个字符(也就是"递归到了第几层")

index 就是"当前处理到哪一位了",

每递归一层就走到下一位 → 所以是 index + 1。

List res:结果收集容器,保存每一条完整路径

3.代码实现

java 复制代码
class Solution {
    public List<String> letterCasePermutation(String s) {
        //结果列表,保存字符串
        List<String> res=new ArrayList<>();
        //将字符串变成字符数组
        char[]  ch=s.toCharArray();
        //回溯遍历字符数组
        //路径(已经做出的选择)、当前决策的位置、结果收集容器,再加上原始输入 / 约束信息。
        dfs(ch,0,res);
        return res;
        
    }
    // 回溯函数:在 ch 的基础上,从 index 这个位置开始,生成所有可能的大小写组合
    public void dfs(char[] ch,int index,List<String> res)
    {
    // 终止条件:走到字符串末尾,当前 ch 就是一种方案
        if(index==ch.length)
        { //此时 ch 代表一种完整的方案,把它转成字符串加入结果列表
            res.add(new String(ch));
             // 返回上一层递归
            return;
        }
        
     // 如果是字母:两条分支------小写一个、大写一个
        if(Character.isLetter(ch[index]))
        {
            // 分支1:改成小写
         ch[index]=Character.toLowerCase(ch[index]);
         dfs(ch,index+1,res);
         // 分支2:改成大写
         ch[index]=Character.toUpperCase(ch[index]);
         dfs(ch,index+1,res);
        }else{//  如果是数字:只能原样往下走一次
            dfs(ch,index+1,res);
        }
    }
}
相关推荐
jllllyuz几秒前
MATLAB实现蜻蜓优化算法
开发语言·算法·matlab
冰暮流星16 分钟前
javascript逻辑运算符
开发语言·javascript·ecmascript
flysh0517 分钟前
如何利用 C# 内置的 Action 和 Func 委托
开发语言·c#
一嘴一个橘子22 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora38 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
码农小韩38 分钟前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
冰冰菜的扣jio38 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
木风小助理39 分钟前
`mapfile`命令详解:Bash中高效的文本至数组转换工具
开发语言·chrome·bash
yyy(十一月限定版)1 小时前
初始matlab
开发语言·matlab
LawrenceLan1 小时前
Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字
开发语言·flutter·dart