• 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中的回溯法:只知道先写退出条件,再写循环

    [一句话思路]:

    1.  先都变成小写再说 简单粗暴。不是不可以,调用java已有的函数行,可见函数很多

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1.  DFS的循环中,退出条件是return; 不要把添加结果理解成退出
    2. 一般是主函数返回,helper类型为void,注意一下
    3. Character.toUpperCase(a[pos])的操作对象是Character抽象类,不是a[pos]本身,所以要赋值。不要搞错对象了。

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    1. corner case需要带入值来思考,不能一概而论 eg本题null- null

    [复杂度]:Time complexity: O() Space complexity: O()

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    1. 回溯法:先启动,然后进行一步,下一步后返回

    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]);
            }
        }
    }
    View Code
  • 相关阅读:
    Maven配置与创建
    JDBCTemplate执行增删改查(CDUR)操作
    事务(Transaction)
    sql批处理(batch)的简单使用
    基于XML配置的AOP实现日志打印
    简单的aop实现日志打印(切入点表达式)
    SpringMVC下文件的上传与下载以及文件列表的显示
    @RequestMapping映射请求,@PathVariable,@RequestParam,@RequestHeader的使用
    SpringMvc的异常处理
    SpringMVC的HelloWorld快速入门!
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8535700.html
Copyright © 2020-2023  润新知