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

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

注意:

  • S 的长度不超过12
  • S 仅由数字和字母组成。

这题的做法比较简单的是递归,当遍历遇到数字时,一直遍历下去到字母,遇到字母则分别进入两条路,一条大写,一条小写,直到遍历到末尾,把答案添加到List中。

参考博客:https://unclegem.cn/2018/05/13/Leetcode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-784-%E5%AD%97%E6%AF%8D%E5%A4%A7%E5%B0%8F%E5%86%99%E5%85%A8%E6%8E%92%E5%88%97/

这里可以注意一下优化遇到数字的逻辑处理,遇到数字的时候不需要参与递归,直接遍历就好了。

代码如下:

 class Solution {
List<String> ans = new LinkedList<>(); public List<String> letterCasePermutation(String S) {
dfs("", S, 0);
return ans;
} public void dfs(String tmp, String S, int index) { if (index == S.length())
ans.add(tmp);
else {
char ch = S.charAt(index);
if (!Character.isLetter(ch)) // 不是字母,是数字
{
int tmpindex = index;
String add = "";
while (!Character.isLetter(S.charAt(tmpindex))) {
add += S.charAt(tmpindex);
tmpindex++;
}
dfs(tmp + add, S, tmpindex);
} else { ch = Character.toLowerCase(ch);
dfs(tmp + ch, S, index + 1);
ch = Character.toUpperCase(ch);
dfs(tmp + ch, S, index + 1);
}
}
}
}

领扣(LeetCode)字母大小写全排列 个人题解的更多相关文章

  1. Java实现 LeetCode 784 字母大小写全排列(DFS)

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

  2. [LeetCode] 784. 字母大小写全排列 ☆☆☆(回溯、深度优先遍历)

    https://leetcode-cn.com/problems/letter-case-permutation/solution/shen-du-you-xian-bian-li-hui-su-su ...

  3. [LeetCode] Letter Case Permutation 字母大小写全排列

    Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...

  4. [Swift]LeetCode784. 字母大小写全排列 | Letter Case Permutation

    Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...

  5. Leetcode784.Letter Case Permutation字母大小写全排列

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

  6. 784. Letter Case Permutation C++字母大小写全排列

    网址:https://leetcode.com/problems/letter-case-permutation/ basic backtracking class Solution { public ...

  7. 领扣[LeetCode]从零开始[使用C++][1,10]

    0.序 以后不做后端开发是不是就用不到C++了?真香.话不多说,我已经躺倒在第一题上了.不贴题目了,持续更新. 1.两数之和 原文:https://www.cnblogs.com/grandyang/ ...

  8. 领扣(LeetCode)删除链表中的节点 个人题解

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...

  9. 领扣(LeetCode)第三大的数 个人题解

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...

随机推荐

  1. JVM 中发生内存溢出的 8 种原因及解决办法

    1. Java 堆空间 2. GC 开销超过限制 3. 请求的数组大小超过虚拟机限制 4. Perm gen 空间 5. Metaspace 6. 无法新建本机线程 7. 杀死进程或子进程 8. 发生 ...

  2. 常用函数-Linux文件操作

    /************************************************************************ 函数功能:寻找文件夹下的某格式文件 std::vec ...

  3. 11.Nginx架构进阶

    1.如何将LNMP拆分为LNP+MySQL 1.备份172.16.1.7上的数据库信息 [root@web01 ~]# mysqldump -uroot -p'000000' --all-databa ...

  4. C语言1作业004

    这个作业属于哪个课程 C语言作业004 我在这个课程的目标是 理解和掌握for语句的基本操作 这个作业在哪个具体方面帮助我实现目标 循环结构的应用,数学函数基本问题 参考文献 C语言程序设计(第3版) ...

  5. PHP实现阿里云OSS文件上传(支持批量)

    上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下:   1.下载阿里云OSS对象上传SDK(P ...

  6. iOS 应用签名原理&重签名

    在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等.但是很多相应的开发者并不理解iOS App应用签名的原理和流程.今天着重讲 ...

  7. ansible模块之command、shell、script、file、copy、fetch

    前戏 ansible 批量在远程主机上执行命令 openpyxl 操作excel表格 puppet ansible slatstack ansible epel源 第一步: 下载epel源 wget ...

  8. Flask:第一个Flask项目

    在上一篇文章:Flask:项目的准备工作中,我写了flask项目的准备工作,不清楚创建flask项目需要做哪些准备的朋友可以点击链接看看 1.最简单的Flask项目 代码: from flask im ...

  9. Net Core中 使用Middleware 实现反向代理

    有这样的一个需求,我们要拦截某些特定的请求,并将它们重新定向到另一台服务器中,然而客户端并不知情. 在NetCore中我们可以用中间件来实现, 首先创建项目: 我这里只有2.1 Version 的 添 ...

  10. Java设计模式:23种设计模式

    1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则——面向对象设计原则 5. 里氏替换原则——面向对象设计原则 6. 依赖倒置 ...