【1030】dfs算法
784. 字母大小写全排列
给定一个字符串 s
,通过将字符串 s
中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
示例 1:
输入:s = "a1b2" 输出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
输入: s = "3z4" 输出: ["3z4","3Z4"]
-------------------------------------------------------------------
有思路,但没做出来,看答案然后自己写写试试看DFS
-------------------------------------------------------------------
1 char[] cs; 2 List<String> ans = new ArrayList<>(); 3 public List<String> letterCasePermutation(String s) { 4 cs = s.toCharArray();//toCharArray ()的用法:是将字符串对象中的字符转换为字符数组 5 dfs(0, s.length(), new char[s.length()]);//从头开始深度搜索/回溯 6 return ans; 7 } 8 void dfs(int idx, int n, char[] cur) {// 9 if (idx == n) {//搜索到最后一位 10 ans.add(String.valueOf(cur));//将字符数组cur转化成字符串,加入目标列表 11 return ; 12 }//每次递归的结束条件 13 cur[idx] = cs[idx];//匹配字符,将字符加入当前数组中 14 dfs(idx + 1, n, cur);//递归到整个字符串结束,将得到的串加入list 15 if (Character.isLetter(cs[idx])) {//如果cs[idx]是字母,将它大小写转换加入数组当中 16 cur[idx] = (char) (cs[idx] ^ 32); 17 dfs(idx + 1, n, cur);//递归使用dfs算法,再穿一个字符串 18 } 19 }
-------------------------------------------------------------------
DFS算法,深度优先搜索算法,首先设置一个结束递归的条件:超出深度,或者最大范围,然后进行下一轮递归,最终得到每一个符合条件的数据
1.首先设置结束递归的条件index == n,即索引到达字符串的最大长度
2.进行递归,从第index位开始,先将原串加入,如果第一个字符是字母则将其变换大小写再加入,直到递归到最后一位
通过32位异或,进行大小写转换。大写小写字母的ASC码相差32位,0100 0001 ^ 0010 0000 = 0110 0001,A ^ 0010 0000 = a.
-------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix