LeetCode 字母大小写全排列-784

题目

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

示例:
示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"]
输入: S = "3z4" 输出: ["3z4", "3Z4"]
输入: S = "12345" 输出: ["12345"]
注意: S 的长度不超过12。 S 仅由数字和字母组成。

思路

这题不需要交换顺序排列组合,从0索引开始查找,如果是当前数组项为数字则跳过,为字母则将大写和小写两种组合添加到res中,并将index + 1传入作为下一次循环的索引的开始,直到匹配不到字母循环结束。

/**
 * @param {string} S
 * @return {string[]}
 */
const letterCasePermutation = S => {
  const res = []
  // 递归方法
  const backtrack = (start, s) => {
    res.push(s)
    // start记录为字母项的下标,从start开始循环。
    for (let i = start; i < s.length; i++) {
      // 找到为字母的项,分别添加其大写与小写两种组合,数字则跳过。
      if (s[i] >= 'a' && s[i] <= 'z') {
        // 添加大写的组合进行拼接
        backtrack(i + 1, s.slice(0, i) + s[i].toUpperCase() + s.slice(i + 1))
      } else if (s[i] >= 'A' && s[i] <= 'Z') {
        // 添加小写的组合进行拼接
        backtrack(i + 1, s.slice(0, i) + s[i].toLowerCase() + s.slice(i + 1))
      }
    }
  }
  // 从0开始找,添加初始值进入res
  backtrack(0, S) 
  return res
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容