0%

LeetCode.括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

  • 示例:
    输入:n = 3
    输出:[“((()))”,”(()())”,”(())()”,”()(())”,”()()()”]

    解法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    object BracketsGen {

    def main(args: Array[String]): Unit = {
    println(solution1(1))
    println(solution1(2))
    println(solution1(3))
    println(solution1(4))
    }

    /**
    * 迭代
    */
    def solution1(n: Int): List[String] = {
    val arr = new Array[Set[String]](n + 1)
    arr(1) = Set("()")
    for (i <- 2 until n + 1) {
    arr(i) = Set()
    }
    for (i <- 2 until n + 1) {
    for (last <- arr(i - 1)) {
    arr(i) += last + "()"
    for (j <- 0 until last.length - 1) {
    if (last.charAt(j).toString == "(") {
    if (last.charAt(j + 1).toString == ")") {
    arr(i) += last.substring(0, j + 1) + "()" + last.substring(j + 1, last.length)
    arr(i) += last.substring(0, j + 2) + "()" + last.substring(j + 2, last.length)
    }
    }
    }
    }
    }

    arr(n).toList
    }
    }