[Leet Code] 22. Generate Parentheses

  • 이번 포스팅에서는 Leet Code 22번 Generate Parentheses 문제를 다룬다.

Problem

  • Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Example 1:

Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]

Solution :

import java.util.*;

public class LeetCode_22_GenerateParentheses {
    static List<String> output;
    static Deque<Character> stack;
    static StringBuilder sb;
    public List<String> generateParenthesis(int n) {
        output = new ArrayList<>();
        stack = new ArrayDeque<>();
        sb = new StringBuilder();
        comb(0,0,n);
        return output;
    }
    static void comb(int left,int right, int n){
        if(left == n && right == n){
            output.add(sb.toString());
            return;
        }
        if(left < n){
            stack.add('(');
            sb.append('(');
            comb(left+1, right, n);
            stack.poll();
            sb.deleteCharAt(sb.length()-1);
        }
        if(right < n){
            if(stack.size()> right){
                sb.append(')');
                comb(left,right+1,n);
                sb.deleteCharAt(sb.length()-1);
            }
        }
    }
}
  • 괄호 쌍의 개수가 n으로 주어지고, n의 범위는 8까지이다.
  • 백트래킹으로 해결.
  • 왼쪽괄호를 스택을 통해 담고, 그 기준으로 오른쪽 괄호를 넣을 수 있을때 뎁스를 들어갔다.
  • 아닌 경우 가지치기.

댓글남기기