leetcode784题:字母大小写全排列
题目描述:
给定一个字符串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、LeetCode784 字母大小写全排列
LeetCode784 字母大小写全排列 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入:S = "a1b2 ...
- 字母大小写全排列C语言,14种模式解决面试算法编程题(PART II)
写在前面 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问 ...
- 77.组合 | 40.组合总和II | 39.组合总和 | 784.字母大小写全排列
77.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], ...
- Java——字母大小写全排列
题目链接 字母大小写全排列 题目描述 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 题目示例 ...
- LeetCode 784. 字母大小写全排列
784. 字母大小写全排列 [回溯法] class Solution {// 回溯 4:30 6int n;StringBuilder sb = new StringBuilder();List< ...
- 【784. 字母大小写全排列】
来源:力扣(LeetCode) 描述: 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 示 ...
- leetcode784. 字母大小写全排列(回溯)
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: ["a1 ...
- LeetCode784.字母大小写全排列 个人纪录2022.10.30
给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串. 返回 所有可能得到的字符串集合 .以 任意顺序 返回输出. 示例 1: 输入:s = "a1b2 ...
- 784.字母大小写全排列
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: ["a1 ...
最新文章
- Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
- 【C 语言】结构体相关 的 函数 指针 数组
- Git根据远程分支建立条新的远程分支
- gRPC-rs:从 C 到 Rust 1
- tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题
- c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?
- mysql排序加权_mysql多关键词查询相关匹配加权排序
- PAT乙级(1026 程序运行时间)
- css免费网站,5个免费网站模板|免费CSS模板网站汇总
- 深圳中电港 招聘FAE(FPGA Lattice)
- C语言实现阿克曼函数
- 海康ehome协议分析(4):GPS上传
- 第二次网页前端培训笔记(HTML表单标签常用字符实体)
- 【WebLogic】解决opatch执行报错“Exception occured: fuser could not be located”
- Extreme DAX中文第1章 商业智能中的DAX
- 记Elsevier上Latex投稿
- RealView 应用
- 硬链接和软连接 linux 的ln命令
- Ubuntu 16.04 可以ping通网络,但打开网页很慢
- 【蓝桥杯】有理数的循环节
热门文章
- Nginx http 视频点播服务器搭建操作指南
- Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...
- Create MSSQL Procedure
- Java 工厂模式学习
- [转]ubuntu network is unreachable 解决记
- UNICODE与ANSI的区别
- [导入]SQL 分页存贮过程
- 贪心算法—区间调度 电影节(POJ 4151)
- 文档丨Oracle 20c 概念手册
- 掌握渗透测试,从Web漏洞靶场搭建开始