https://leetcode.com/problems/generate-parentheses/
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example 1:
Input: n = 3 Output: ["((()))","(()())","(())()","()(())","()()()"]
Example 2:
Input: n = 1 Output: ["()"]
Constraints:
- 1 <= n <= 8
import java.util.*;
public class Solution {
static List<String> ans;
static StringBuilder sb;
public List<String> generateParenthesis(int n) {
sb = new StringBuilder();
ans = new LinkedList<>();
dfs(0, 0, 0, n);
return ans;
}
public void dfs(int depth, int openCnt, int closeCnt, int n){
if (depth == 2*n) {
ans.add(sb.toString());
return;
}
if (openCnt < n){
sb.append('(');
dfs(depth + 1, openCnt + 1, closeCnt, n);
sb.setLength(sb.length() - 1);
}
if (closeCnt < openCnt){
sb.append(')');
dfs(depth + 1, openCnt, closeCnt + 1, n);
sb.setLength(sb.length() - 1);
}
}
}
1. 어려웠던 점:
- X
2. 알게된 점:
- 백트래킹 복습
3. 알고리즘 풀이:
- 열린 괄호는 n의 수만큼 나올 수 있다.
그래서 if (openCnt < n)
- 닫힌 괄호는 열린 괄호의 수만큼 나올 수 있다.
그래서 if (closeCnt < openCnt)
- 2*n이 되면 n개의 괄호 쌍이 완성된다.
그래서 If (depth == 2*n)
'알고리즘 문제풀이 > LeetCode' 카테고리의 다른 글
[LeetCode 279] Perfect Squares with JAVA (0) | 2021.06.11 |
---|---|
[LeetCode 17] Letter Combinations of a Phone Number with JAVA (0) | 2021.05.27 |
[LeetCode 746] Min Cost Climbing Stairs with Java (0) | 2021.05.15 |
[LeetCode 91] Decode Ways with JAVA (0) | 2021.05.12 |
[LeetCode 53] Maximum Subarray with JAVA (0) | 2021.05.11 |