입력값 s
문자열에 대해 대소문자 구분하는 모든 문자열 조합을 찾는 문제이다. 모든 조합을 찾는 문제이므로 dfs를 쉽게 연상할 수 있었고, 숫자와 문자를 구분하여 문자열일 경우 upperCase
와 lowerCase
를 따로 재귀적으로 호출해 주었다.
Input: s = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]
result
배열과 dfs
함수를 작성한다.s[index]
가 숫자라면 그대로 문자열을 더하여 dfs
를 반복한다. const letterCasePermutation = function(s) {
const result = [];
const dfs = (string, index) => {
if (index === s.length) { // 모든 문자열을 다 변환한 경우
result.push(string);
return;
}
if (isNaN(s[index])) { // 문자인 경우
dfs(string + s[index].toLowerCase(), index + 1); // 소문자로 변환한 경우 탐색
dfs(string + s[index].toUpperCase(), index + 1); // 대문자로 변환한 경우 탐색
} else { // 숫자인 경우
dfs(string + s[index], index + 1); // 탐색하지 않고 그대로 추가
}
};
dfs('', 0); // 탐색 시작
return result;
};