Generate Parentheses

Published by

on

Problem

https://leetcode.com/problems/generate-parentheses/

Solution

class Solution {
    private int n;
    private List<String> result = new ArrayList<>();
    
    public List<String> generateParenthesis(int n) {
        this.n = n;
        String str = "";
        solve(str, "(");
        return result;
    }

    private void solve(String currentString, String addString) {
        String newString = currentString + addString;
        
        if (isValid(newString)) {
            result.add(newString);
            return;
        }

        if (newString.length() < n*2) {
            solve(newString, "(");
            solve(newString, ")");
        } else {
            return;
        }
    }

    private boolean isValid(String str) {
        int strLen = str.length();
        if (strLen != n*2) {
            return false;
        }

        Stack<Character> stack = new Stack<>();
        for(int i=0;i<strLen;i++) {
            char c = str.charAt(i);
            if (c == '(') {
                stack.add(c);
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
}
  • 재귀를 사용하는 backtracking 문제!

Leave a comment

Previous Post
Next Post