784. 字母大小写全排列

内容

给定一个字符串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;
};

回到目录

你可能感兴趣的:(784. 字母大小写全排列)