题目描述:

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

示例:
输入:S = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

输入:S = "3z4"
输出:["3z4", "3Z4"]

输入:S = "12345"
输出:["12345"]

解题思路:

根据题目描述,先画出递归树,如下图所示。可知这道题为一个二叉树。二叉树问题一般可以用DFS即深度优先遍历算法来解决,即可以用回溯算法。代入回溯算法的代码模板即可。

PS:注意每个分结点只有两种状态,故需要for循环。

字母大小写转化技巧:

我们发现大写字符与其对应的小写字符的 ASCII 的差为 32,32 这个值如果敏感的话,它是 2^5=32.在编程语言中,可以表示为 1 << 5。而

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

如果字符是小写字符,减去 32 得到大写字符;
如果字符是大写字符,加上 32 得到小写字符。
而这两者合并起来,就是给这个字符做一次不进位的加法,即异或上 1 << 5。

Java代码

class Solution {public List<String> letterCasePermutation(String S) {List<String> res=new ArrayList<>();int len=S.length();if(len==0){return res;}char[] chararray=S.toCharArray();dfs(0,chararray,res);return res;}public void dfs(int startIndex,char[] chararray,List<String> res){if(startIndex==chararray.length){res.add(new String(chararray));return;}dfs(startIndex+1,chararray,res); //如果是数字就跳过判断,直接递归if(Character.isLetter(chararray[startIndex])){chararray[startIndex]^=1<<5; //大小写转换技巧dfs(startIndex+1,chararray,res);}}}

leetcode784题:字母大小写全排列相关推荐

  1. 1、LeetCode784 字母大小写全排列

    LeetCode784 字母大小写全排列 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入:S = "a1b2 ...

  2. 字母大小写全排列C语言,14种模式解决面试算法编程题(PART II)

    写在前面 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问 ...

  3. 77.组合 | 40.组合总和II | 39.组合总和 | 784.字母大小写全排列

    77.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [   [2,4], ...

  4. Java——字母大小写全排列

    题目链接 字母大小写全排列 题目描述 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 题目示例 ...

  5. LeetCode 784. 字母大小写全排列

    784. 字母大小写全排列 [回溯法] class Solution {// 回溯 4:30 6int n;StringBuilder sb = new StringBuilder();List< ...

  6. 【784. 字母大小写全排列】

    来源:力扣(LeetCode) 描述:   给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 示 ...

  7. leetcode784. 字母大小写全排列(回溯)

    给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: ["a1 ...

  8. LeetCode784.字母大小写全排列 个人纪录2022.10.30

    给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 示例 1: 输入:s = "a1b2 ...

  9. 784.字母大小写全排列

    给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: ["a1 ...

最新文章

  1. Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
  2. 【C 语言】结构体相关 的 函数 指针 数组
  3. Git根据远程分支建立条新的远程分支
  4. gRPC-rs:从 C 到 Rust 1
  5. tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题
  6. c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?
  7. mysql排序加权_mysql多关键词查询相关匹配加权排序
  8. PAT乙级(1026 程序运行时间)
  9. css免费网站,5个免费网站模板|免费CSS模板网站汇总
  10. 深圳中电港 招聘FAE(FPGA Lattice)
  11. C语言实现阿克曼函数
  12. 海康ehome协议分析(4):GPS上传
  13. 第二次网页前端培训笔记(HTML表单标签常用字符实体)
  14. 【WebLogic】解决opatch执行报错“Exception occured: fuser could not be located”
  15. Extreme DAX中文第1章 商业智能中的DAX
  16. 记Elsevier上Latex投稿
  17. RealView 应用
  18. 硬链接和软连接 linux 的ln命令
  19. Ubuntu 16.04 可以ping通网络,但打开网页很慢
  20. 【蓝桥杯】有理数的循环节

热门文章

  1. Nginx http 视频点播服务器搭建操作指南
  2. Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...
  3. Create MSSQL Procedure
  4. Java 工厂模式学习
  5. [转]ubuntu network is unreachable 解决记
  6. UNICODE与ANSI的区别
  7. [导入]SQL 分页存贮过程
  8. 贪心算法—区间调度 电影节(POJ 4151)
  9. 文档丨Oracle 20c 概念手册
  10. 掌握渗透测试,从Web漏洞靶场搭建开始