题目
给定一个字符串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 春招闯关活动」, 点击查看 活动详情