[LeetCode] 784. 字母大小写全排序

题目描述:

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

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

示例 1:

复制代码
输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

示例 2:

复制代码
输入: s = "3z4"
输出: ["3z4","3Z4"]

提示:

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

题目链接:

. - 力扣(LeetCode)

解题主要思路:

其实这题很简单,遍历string中的每个元素,每次遍历的时候分两步走,一步是不需要进行大小写转换,这次直接插入char元素,然后进入下一次遍历;另一步是进行大小写转换,不过需要注意的是,如果在进行大小写转换的时候,发现需要转换的元素是数字的话,那就直接跳过,不需要任何改动,也不需要记录,否则ret中会出现多余的string,因为 "不需要进行大小写转换" 这一步已经帮我们做了该做的事。

解题代码:

cpp 复制代码
class Solution {
public:
    vector<string> ret;
    string path;
    vector<string> letterCasePermutation(string s) {
        dfs(s, 0);
        return ret;
    }
    void dfs(string& s, int pos)
    {
        // 结束条件
        if (path.size() == s.size()) {
            ret.push_back(path);
            return;
        }
        char c = s[pos];
        // 不改变
        path.push_back(c);
        dfs(s, pos+1);
        path.pop_back(); // 回溯

        // 改变
        if (!(c >= '0' && c <= '9')) {
            // 数字的话不用管
            if (c >= 'a' && c <= 'z') c -= 32;
            else c += 32;
            path.push_back(c);
            dfs(s, pos+1);
            path.pop_back();            
        }
    }
};
相关推荐
Rabitebla8 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
system_error_x8 小时前
C++ 编程基础入门教程
开发语言·c++
远离UE48 小时前
半拉格朗日学习笔记 动力学 实时渲染
人工智能·算法
小郎君6589 小时前
MPTT 不是万能编号:一棵百万节点树的增删改与批量事务
算法
FPGA小徐9 小时前
【一生一芯 / PA】AM 核心文件逐行解析(上):从 start.S 到 gpu.c
前端·算法
Tairitsu_H10 小时前
[动态规划#1] 子数组 | 最大子数组和 | 环形子数组的最大和 | 乘积最大子数组 | 乘积为正数的最长子数组
算法·动态规划
凯瑟琳.奥古斯特10 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
布莱克60510 小时前
A* 算法详解:从原理到实现
开发语言·c++·算法
多弗朗皮卡丘10 小时前
C++ 智能指针
开发语言·c++·c++11·智能指针
段一凡-华北理工大学10 小时前
高炉炼铁机器视觉与智能识别十八讲~系列文章15:可靠性篇:防误报、容错与识别系统的鲁棒性设计
人工智能·算法·机器学习·高炉大模型·高炉机器视觉·高炉炼铁模型开发