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

1.题目

2.思路

深度优先遍历(回溯)



补充:大小写字符转换

charArrayindex ^= 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);
        }
    }
}
相关推荐
Java后端的Ai之路1 分钟前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
ruleslol3 分钟前
System Prompt(系统提示词) 的用法
java·ai
skywalk81634 分钟前
AI 中台记录:使用码道基于deepseek harness制作AI数字中台9.14日
开发语言·人工智能·ai中台
CVer儿5 分钟前
vs2022配置qt
开发语言·qt
user_admin_god7 分钟前
第 03 篇:Java HttpClient 手写第一个 Chat 请求
java·人工智能·spring boot·语言模型
西峰u15 分钟前
Java多线程从入门到线程安全
java·开发语言·jvm
gis开发之家34 分钟前
Spring Boot 4 定时任务与异步线程池:从 @Scheduled 到高并发任务编排(生产级实战)
java·spring boot·后端·wpf·spring boot4
郑州光合科技余经理2 小时前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin199701080163 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
YangYang9YangYan3 小时前
2026 校招审计风控岗位 JD 拆解,工具、专业能力与面试考点
java·大数据·人工智能·数据分析