LeetCode刷题--- 字母大小写全排列

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I   

【C++】    

 http://t.csdnimg.cn/6AbpV 

数据结构与算法

 http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


字母大小写全排列

题目链接:字母大小写全排列

题目

给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。

返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。

示例 1:

输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

示例 2:

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

提示:

  • 1 <= s.length <= 12
  • s 由小写英文字母、大写英文字母和数字组成

解法

题目解析

  • 题目的意思非常简单,给定一个字符串 s 
  • 通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。
  • 返回 所有可能得到的字符串集合 ,以 任意顺序 返回输出。

示例 1:

输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

算法原理思路讲解 

只需要对英⽂字⺟进⾏处理,处理每个元素时存在三种情况
  1. 不进⾏处理;
  2. 若当前字⺟是英⽂字⺟并且是⼤写,将其修改为⼩写;
  3. 若当前字⺟是英⽂字⺟并且是⼩写,将其修改为⼤写。

一、画出决策树

决策树就是我们后面设计函数的思路


二、设计代码

(1)全局变量

   string path;
   vector<string> ret;
  • ret(存储转变大小写,获得一个个新的字符串)
  • path(组合的路径记录)

(2)设计递归函数

void dfs(string s, int pos);  // 表示现在要处理的元素的下标
  • 参数:s(字符串),pos(当前要处理的元素下标);
  • 返回值:无;
  • 函数作用:查找所有可能的字符串集合,并将其记录在答案列表。

从前往后按序进⾏递归,递归流程如下
  1. 递归结束条件:当前需要处理的元素下标越界,表⽰处理完毕,记录当前状态并返回;
  2. 判断当前元素是否为数字,若是,对当前元素不进⾏任何处理,直接递归下⼀位元素;
  3. 判断当前元素是否为⼩写字⺟,若是,将其修改为⼤写字⺟并递归下⼀个元素,递归结束时撤销修改操作;
  4. 判断当前元素是否为⼤写字⺟,若是,将其修改为⼩写字⺟并递归下⼀个元素,递归结束时撤销修改操作;

以上思路讲解完毕,大家可以自己做一下了


代码实现

  • 时间复杂度:O(n×2^{n}),其中 n 表示字符串的长度。递归深度最多为 n,所有可能的递归子状态最多为 2^{n}个,每次个子状态的搜索时间为 O(n),因此时间复杂度为 O(n×2^{n})。
  • 空间复杂度:O(n×2^{n})。递归深度最多为 n,。队列中的元素数目最多为 2^{n} 个,每次个子状态的搜索时间为 O(n),因此空间复杂度为 O(n×2^{n}) 。
class Solution {
public:
   string path;
    vector<string> ret;

    void dfs(string s, int pos)  // 表示现在要处理的元素的下标
    {
        if (path.size() == s.size())
        {
            ret.push_back(path);
            return;
        }

        if (s[pos] >= '0' && s[pos] <= '9')
        {
            path.push_back(s[pos]);
            dfs(s, pos + 1);
            path.pop_back();
        }
        else
        {
            if (s[pos] >= 'a' && s[pos] <= 'z')
            {
                path.push_back(s[pos]);
                dfs(s, pos + 1);
                path.pop_back();

                path.push_back(s[pos]-32);
                dfs(s, pos + 1);
                path.pop_back();
            }
            else
            {
                path.push_back(s[pos]);
                dfs(s, pos + 1);
                path.pop_back();

                path.push_back(s[pos] + 32);
                dfs(s, pos + 1);
                path.pop_back();
            }
        }
    }

    vector<string> letterCasePermutation(string s) 
    {
        dfs(s, 0);

        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269094.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cesium实现二三维联动

记录项目中实现二三维地图联动 效果如下&#xff1a; 第一步&#xff1a;现在页面中加载二三维地图&#xff08;地图的初始化已省略&#xff09; <template><div><div><button click"show">二三维联动</button></div><div&…

css学习笔记7(浮动)

css学习笔记7&#xff08;浮动&#xff09; 六、浮动1.浮动的简介2.元素浮动后的特点3.浮动影响3.1浮动后会有哪些影响3.2浮动后会有哪些影响 4.浮动布局练习 六、浮动 1.浮动的简介 ​ 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面…

VR全景对普通人的生活有哪些好处?

许多普通人对VR全景还全然没有概念&#xff0c;这是因为VR全景虽然一直在快速发展&#xff0c;但目前为止也不过几年而已&#xff0c;但这发展的几年同样为我们普通人的生活带来了切实的改变和便利。VR全景技术为人们带来了沉浸感和真实感的体验&#xff0c;让我们感受到迥异于…

C# SqlSugar 数据库 T4模板

生成效果 模板代码 <# template debug"false" hostspecific"true" language"C#" #> <# output extension".cs" #> <# assembly name"System.Core" #> <# assembly name"System.Data" #>…

图片素材管理软件Eagle for mac提高素材整理维度

Eagle for mac是一款图片素材管理软件&#xff0c;支持藏网页图片&#xff0c;网页截屏&#xff0c;屏幕截图和标注&#xff0c;自动标签和筛选等功能&#xff0c;让你设计师方便存储需要的素材和查找&#xff0c;提供工作效率。 Eagle mac软件介绍 Eagle mac帮助你成为更好、…

小天使的小难题:新生儿疝气的关注与温馨呵护

引言&#xff1a; 新生儿疝气是一种在出生后可能出现的常见情况&#xff0c;虽然通常不会造成长期影响&#xff0c;但对于家长而言&#xff0c;了解如何正确应对新生儿疝气是至关重要的。本文将深入探讨新生儿疝气的原因、症状&#xff0c;以及家长在面对这一问题时应该采取的…

Isaac Sim urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

系列七(实战)、发送 接收单向消息(Java操作RocketMQ)

一、发送 & 接收单向消息 1.1、概述 发送单向消息&#xff0c;适用于发送方不关心或者不在意消息的发送结果&#xff0c;这种方式的吞吐量很大&#xff0c;但是存在消息丢失的风险&#xff0c;对于重要消息要慎用&#xff01;该种方式通常适用于对消息没有那么严格的场景中…

0基础学习VR全景平台篇第131篇:曝光三要素—光圈

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 我们经常从电视或书刊上看到这样的照片&#xff0c;照片的主体清晰&#xff0c;前后镜朦胧虚化&#xff0c;整体看起来非常的漂亮。那这样的照片是如何拍出来的呢&#xff1f;他和…

A+CLUB管理人支持计划第十期 | 坤望基金

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&…

第十八节TypeScript 泛型

1、简介 泛型是一种编程语言特性&#xff0c;允许在定义函数、类、接口等使用占位符来表示类型&#xff0c;而不是具体的类型。 泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。 使用泛型的主要目的是为了处理不特定类型的数据&#xff0c;使得代码可以适用…

公众号推荐流量玩法的3个秘密

从微信生态的流量触点来看&#xff0c;公众号链接着私聊、朋友圈、微信群、小程序、视频号、搜一搜、看一看等一切与目标用户能接触到的中转站 流量的尽头是私域。而对于大部分普通人来说&#xff0c;公众号可以作为私域的第一站。且相比个人微信号&#xff0c;其有着深度价值…

【数字电路】期末速通!

1. 数制及转换 常用的数制&#xff1a;十进制&#xff08;D&#xff09;&#xff0c;二进制&#xff08;B&#xff09;&#xff0c;八进制&#xff08;O&#xff09;&#xff0c;十六进制&#xff08;H&#xff09;。 常见的码制包括以下几种&#xff1a; 二进制码&#xff…

xposed 02 - 模块编写与构造函数Hook

本文讨论一下xposed模块编写的步骤&#xff0c;与如何hook构造函数&#xff0c;以及一些需要注意的地方。 Xposed模块编写 跟把大象放冰箱分3步一样&#xff0c;编写xposed模块只需要4步。 第一步 拷贝 XposedBridgeApi.jar 到模块工程的 libs 目录下&#xff0c;放一个 ja…

Unity 根据 数字 让 显示游戏总时长的txt直接显示该个 时间时分秒显示方法

Unity 根据 数字 让 显示游戏总时长的txt直接显示该个 时间时分秒显示方法 效果如下&#xff1a; 上代码 void Update(){int timeER int.Parse((txt_gameTimesER - Time.deltaTime).ToString("00"));Set_All_PlayTime_txtLookTime(timeER,bg.txt_LastTime); }/// &…

c 语言学习:输出阶乘的算式

c 语言学习&#xff1a;输出阶乘的算式 代码 #include "stdio.h"int fact(int num){if (num < 1){printf("1 ");return 1;} else {printf("%d x ",num);return num * fact(num-1);} }int main(){int num 10; // printf("plz inpu…

[Latex写作] vscode搭建latex写作环境

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 如果是为了方便简洁,实际使用Overleaf完全够了,之前也写过使用Obsidian写文章的教程. 这次主要介绍使用在本地vscode加上插件写论文. 需要工具 vscode 官网即可texlive 通过镜像站即可,比如Index of /CTAN/systems…

类和对象的创建和实例化

1. 类的概述 1.1 具体示例 类是描述一类事物的特征和行为的统称&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一个人&#xff0c;从外观上&#xff08;特征&#xff09;和言行举止&#xff08;行为&#xff09;上进行描述外观上&#xff…

智能安全配电装置在临时展会场所中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性&#xff0c;针对此类场所中隐含的电气安全隐患问题&#xff0c;结合智能安全配电装置的功能&#xff0c;从用电设备的接地、线路的安装与敷设、设备的维护和管理…

LaTex插入图片

一、插入图片 在.tex文件开头导入相应的宏包 \documentclass{article} \usepackage{graphicx} % 导入图像的宏包、单图 \usepackage{subfigure} % 导入图像的宏包、子图 \graphicspath{{./images/}} % 告诉 LaTeX 这篇文档中的图片所存储的位置是主文档所在目录下的 images 文…