內(nèi)容
給定一個字符串S,通過將字符串S中的每個字母轉(zhuǎn)變大小寫箱锐,我們可以獲得一個新的字符串。返回所有可能得到的字符串集合。
示例:
輸入: S = "a1b2"
輸出: ["a1b2", "a1B2", "A1b2", "A1B2"]
輸入: S = "3z4"
輸出: ["3z4", "3Z4"]
輸入: S = "12345"
輸出: ["12345"]
注意:
S 的長度不超過12瞧预。
S 僅由數(shù)字和字母組成。
思路
看完題可以這樣想仅政,
從頭開始遍歷字符串s垢油,遇到第一個字母。就分兩條路走圆丹,第一條是以小寫拼接后續(xù)的字符串滩愁,第二條是用大寫拼接,那么每次遇到字母都這樣分化辫封,畫圖出來很像一顆樹硝枉,那么就變成了遍歷樹,所以用遞歸比較直觀倦微。
代碼
/**
看完題可以這樣想妻味,
從頭開始遍歷字符串s,遇到第一個字母璃诀。就分兩條路走弧可,第一條是以小寫拼接后續(xù)的字符串,第二條是用大寫拼接,那么每次遇到字母都這樣分化棕诵,畫圖出來很像一顆樹裁良,那么就變成了遍歷樹,所以用遞歸比較直觀校套。
* @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;
};