문제
LeetCode 22. Generate Parentheses
https://leetcode.com/problems/generate-parentheses/
언어
자바스크립트(JavaScript)
접근 방법
- 재귀적으로 푼다.
- (를 선택하는 경우와 )를 선택하는 경우로 나눈다.
- 괄호 갯수를 초과했거나 유효하지 않은 경우는 거른다.
코드
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let result = [];
comb(n, 0, 0, '', result);
return result;
};
const comb = (n, leftNum, rightNum, str, result) => {
if (leftNum === n && rightNum === n){
if(check(str)){
result.push(str);
}
return;
}
if(leftNum > n || rightNum > n){
return;
}
comb(n, leftNum+1, rightNum, str + '(', result);
comb(n, leftNum, rightNum+1, str + ')', result);
}
const check = (str) => {
let status = [];
let isInvalid = false;
for (let i=0; i<str.length; i++){
if(str[i] === '('){
status.push('(');
}else{
if(status.pop() !== '('){
isInvalid = true;
break;
}
}
}
if(isInvalid){
return false;
}
return true;
}
결과
Runtime: 80 ms, faster than 58.96% of JavaScript online submissions for Generate Parentheses.
Memory Usage: 42.3 MB, less than 13.48% of JavaScript online submissions for Generate Parentheses.
복기
- 어렵지 않게 풀 수 있었다.
- 재귀적으로 풀지 않으면 코드가 복잡해진다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 48. Rotate Image (0) | 2021.06.28 |
---|---|
[LeetCode] 19. Remove Nth Node From End of List (0) | 2021.06.24 |
[LeetCode] 17. Letter Combinations of a Phone Number (0) | 2021.06.24 |
[LeetCode] 15. 3Sum (0) | 2021.06.24 |
[LeetCode] 92. Reverse Linked List II (0) | 2021.06.24 |