784. Letter Case Permutation 字符串中字母的大小写组合
[抄题]:
Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.
Examples:
Input: S = "a1b2"
Output: ["a1b2", "a1B2", "A1b2", "A1B2"] Input: S = "3z4"
Output: ["3z4", "3Z4"] Input: S = "12345"
Output: ["12345"]
[暴力解法]:
时间分析:
空间分析:
[思维问题]:
不知道怎么写DFS中的回溯法:只知道先写退出条件,再写循环
[一句话思路]:
- 先都变成小写再说 简单粗暴。不是不可以,调用java已有的函数行,可见函数很多
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- DFS的循环中,退出条件是return; 不要把添加结果理解成退出
- 一般是主函数返回,helper类型为void,注意一下
- Character.toUpperCase(a[pos])的操作对象是Character抽象类,不是a[pos]本身,所以要赋值。不要搞错对象了。
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
- corner case需要带入值来思考,不能一概而论 eg本题null- null
[复杂度]:Time complexity: O() Space complexity: O()
[英文数据结构或算法,为什么不用别的数据结构或算法]:
- 回溯法:先启动,然后进行一步,下一步后再返回
Character是char的包装类,就像Integer和int ,以及Long和long一样。
Character是char的包装类,注意它是一个类,提供了很多方法的。
包装类和基本类型可以自动转换,这是jdk1.5(5.0)的新特性,叫做自动封箱和自动解封
即:
例1:
char ch='a';
Character ch1=ch;//自动封箱
Character c=new Character(a);
char c1=c;//自动解封
Character 方法:
| 序号 | 方法与描述 |
|---|---|
| 1 | isLetter() 是否是一个字母 |
| 2 | isDigit() 是否是一个数字字符 |
| 3 | isWhitespace() 是否是一个空格 |
| 4 | isUpperCase() 是否是大写字母 |
| 5 | isLowerCase() 是否是小写字母 |
| 6 | toUpperCase() 指定字母的大写形式 |
| 7 | toLowerCase() 指定字母的小写形式 |
| 8 | toString() 返回字符的字符串形式,字符串的长度仅为1 |
[关键模板化代码]:
void helper (char[] a, int pos, List<String> res) {
//break
if (pos == a.length) {
res.add(new String(a));
return ;
}
//start
helper(a, pos + 1, res);
//backtracing
if (Character.isLetter(a[pos])) {
a[pos] = Character.toUpperCase(a[pos]);
helper(a, pos + 1, res);
a[pos] = Character.toLowerCase(a[pos]);
}
退出-开始-回溯
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
class Solution {
public List<String> letterCasePermutation(String S) {
//corner case
List<String> res = new ArrayList<String>();
if (S == null) {
return null;
}
//dfs
char[] a = S.toLowerCase().toCharArray();
helper(a, 0, res);
return res;
}
void helper (char[] a, int pos, List<String> res) {
//break
if (pos == a.length) {
res.add(new String(a));
return ;
}
//start
helper(a, pos + 1, res);
//backtracing
if (Character.isLetter(a[pos])) {
a[pos] = Character.toUpperCase(a[pos]);
helper(a, pos + 1, res);
a[pos] = Character.toLowerCase(a[pos]);
}
}
}
784. Letter Case Permutation 字符串中字母的大小写组合的更多相关文章
- 【Leetcode_easy】784. Letter Case Permutation
problem 784. Letter Case Permutation 参考 1. Leetcode_easy_784. Letter Case Permutation; 2. Grandyang; ...
- 【LeetCode】784. Letter Case Permutation 解题报告 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 循环 日期 题目地址:https://leet ...
- 784. Letter Case Permutation C++字母大小写全排列
网址:https://leetcode.com/problems/letter-case-permutation/ basic backtracking class Solution { public ...
- leetcode 784. Letter Case Permutation——所有BFS和DFS的题目本质上都可以抽象为tree,这样方便你写代码
Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...
- LeetCode 784 Letter Case Permutation 解题报告
题目要求 Given a string S, we can transform every letter individually to be lowercase or uppercase to cr ...
- [LeetCode&Python] Problem 784. Letter Case Permutation
Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...
- 784. Letter Case Permutation
这个题的思想很重要,两种方法 第一种,回溯法 class Solution { public: int sz; vector<string> letterCasePermutation(s ...
- 【easy】784. Letter Case Permutation
Examples: Input: S = "a1b2" Output: ["a1b2", "a1B2", "A1b2", ...
- Map集合应用 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
package com.swift; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import ...
随机推荐
- Oracle 分析函数及常用函数
什么叫分析函数(Analytic function)? Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...
- 阿里历年经典Java面试题汇总
Volatile的特征: A.禁止指令重排(有例外) B.可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存. 当读一个vol ...
- python实现树结构
树在计算机科学的许多领域中使用,包括操作系统,图形,数据库系统和计算机网络.树数据结构与他们的植物表亲有许多共同之处.树数据结构具有根,分支和叶.自然界中的树和计算机科学中的树之间的区别在于树数据结构 ...
- LNMP环境下独立安装Mysql5.7.18 并对数据库文件进行本地物理迁移 (需暂停数据库服务方式)
前几天读研时候的同学要我帮忙给解决一个问题,就是Redhat服务器下面安装了LNMP,并且由于分区的划分不当导致MySQL数据库中存放数据库的盘区内空间被急剧消耗,由于该应用主要是数据分析及备份所用, ...
- Spring获取properties中同一个key对应的多条value的方法
如下方式使用Spring EL @Value("#{'${my.list.of.strings}'.split(',')}") private List<String> ...
- 《FDTD electromagnetic field using MATLAB》读书笔记之 Figure 1.14
背景: 基于公式1.42(Ez分量).1.43(Hy分量)的1D FDTD实现. 计算电场和磁场分量,该分量由z方向的电流片Jz产生,Jz位于两个理想导体极板中间,两个极板平行且向y和z方向无限延伸. ...
- $.each()的用法
var obj = { one:1, two:2, three:3}; $.each(obj, function(key, val) { console.log(key);//one two thre ...
- 949. Largest Time for Given Digits
Given an array of 4 digits, return the largest 24 hour time that can be made. The smallest 24 hour t ...
- FastAdmin 学习线路 (2018-06-09 更新)
FastAdmin 学习线路 以下为常规线路,非常规可跳过. FastAdmin 学习线路 基础 HTML CSS DIV Javascript 基础 jQuery php 基础 对象 命名空间 进阶 ...
- 使用ntp从时间同步服务器更新centos系统时间的方法
CentOS系统时间同步的步骤如下: 复制代码 代码如下: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimentpdate us.pool.ntp ...