字母大小全排列|刷题打卡

175 阅读1分钟

题目

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

示例:
输入:S = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

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

输入:S = "12345"
输出:["12345"]

提示

  • S 的长度不超过12。
  • S 仅由数字和字母组成。

思路(回溯算法)

给大家抛出两个问题,何为深度优先遍历(DFS),广度优先遍历(BFS)

深度优先遍历用于搜索也叫回溯算法;

递归算出这个叶子的总和就是我们所有的集合。

思路:从空字符串开始回溯,一个字符串一个字符串加,加到字母的时候,分别拼接 小写 和 大写 进行回溯,否则,普通回溯即可

解题目

/**
 * @param {string} S
 * @return {string[]}
 */
var letterCasePermutation = function(S) {
  let ans = [];
  const REG = /[A-Za-z]/;
  
  function backtrack(str, i) {
    if (i >= S.length) {
      ans.push( str );
      return ;
    }
    
    let curr = S[i];
    if (REG.test(curr)) {
      let low = str + curr.toLowerCase(),
          high = str + curr.toUpperCase();
      backtrack( low, i + 1 );
      backtrack( high, i + 1 );
    } else {
      backtrack( str + curr, i + 1 );
    }
  }
  backtrack( '', 0 );
  
  return ans;
};

”本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情