内容
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
示例:
输入: S = "a1b2"
输出: ["a1b2", "a1B2", "A1b2", "A1B2"]
输入: S = "3z4"
输出: ["3z4", "3Z4"]
输入: S = "12345"
输出: ["12345"]
注意:
S 的长度不超过12。
S 仅由数字和字母组成。
思路
看完题可以这样想,
从头开始遍历字符串s,遇到第一个字母。就分两条路走,第一条是以小写拼接后续的字符串,第二条是用大写拼接,那么每次遇到字母都这样分化,画图出来很像一颗树,那么就变成了遍历树,所以用递归比较直观。
代码
/**
看完题可以这样想,
从头开始遍历字符串s,遇到第一个字母。就分两条路走,第一条是以小写拼接后续的字符串,第二条是用大写拼接,那么每次遇到字母都这样分化,画图出来很像一颗树,那么就变成了遍历树,所以用递归比较直观。
* @param {string} S
* @return {string[]}
*/
var letterCasePermutation = function (S) {
if (S.length == 0) return [''];
var isNum = /[0-9]/.test(S[0]);
var upper = S[0].toUpperCase();
var lower = S[0].toLowerCase();
if (S.length == 1) {
return isNum ? [upper] : [upper, lower];
} else {
var array = [];
var rest = letterCasePermutation(S.slice(1));
for (var i of rest) {
if (isNum) {
array.push(upper + i);
} else {
array.push(upper + i);
array.push(lower + i);
}
}
}
return array;
};