22. Generate Parentheses

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

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

Solution

(1) Java

class Solution {

    public List<String> generateParenthesis(int n) {
        List<String> rst = new ArrayList<>();
        if (n <= 0) {
            return rst;
        }
        helper(rst, n, n, "");
        return rst;
    }

    private void helper(List<String> rst, int left, int right, String str) {
        if (left == 0 && right == 0) {
            rst.add(str);
            return;
        }
        if (right < left) {
            return;
        }
        if (left > 0) {
            helper(rst, left-1, right, str+"(");
        }
        helper(rst, left, right-1, str+")");
    }
}

(2) Python

class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        rst = []
        def helper(left,right,str):
            if not left and not right:
                rst.append(str)
            if left:
                helper(left-1, right, str+"(")
            if right > left:
                helper(left, right-1, str+")")

        if not n:
            return rst

(3) Scala

object Solution {
    import scala.collection.mutable.ListBuffer
    def generateParenthesis(n: Int): List[String] = {

        if (n <= 0) {
            return List[String]()
        }
        var list = ListBuffer[String]();
        helper(list, n, n, "")
        return list.toList
    }

    def helper(list: ListBuffer[String], left: Int, right: Int, str: String): Unit = {
        if (left == 0 && right == 0) {
            list += str
            return
        }
        if (left > 0) {
            helper(list, left-1, right, str+"(")
        }
        if (right > left) {
            helper(list, left, right-1, str+")")
        }
    }
}

results matching ""

    No results matching ""