【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.
-------------------------------------------------------------------

 

 

posted @   Wianxhlyl  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示