leetcode-22-括号生成
  tU95LmXaBSF2 2023年11月05日 48 0


题目描述

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

示例 1:

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

输入:n = 1
输出:[“()”]

提示:

1 <= n <= 8

解题思路

这个问题可以通过回溯法来解决,回溯法是一种通过不断尝试可能的选择并回退的方法来解决问题的技术。

  1. 我们从空字符串开始,不断地添加左括号和右括号,但是需要满足一些条件,以确保生成的括号序列是有效的。
  2. 在每一步,我们有两个选择:
  • 添加一个左括号,前提是左括号的数量不超过n。
  • 添加一个右括号,前提是右括号的数量不超过左括号的数量。
  1. 我们通过递归来尝试所有可能的选择。在每一步,我们都根据当前的选择继续递归调用,直到生成的字符串长度达到2 * n。如果生成的字符串是有效的,就将其添加到结果列表中。

这个算法的关键在于递归的思想,每一步都在当前的字符串基础上继续拼接括号,直到达到目标长度。递归的过程中会有一些条件判断来限制括号的添加,以确保生成的括号序列是有效的。

代码

object Solution {
    def generateParenthesis(n: Int): List[String] = {
        def backtrack(s: String, left: Int, right: Int): List[String] = {
            if (s.length == 2 * n) {
                List(s)
            } else {
                var result: List[String] = List.empty
                if (left < n) {
                    result = result ::: backtrack(s + '(', left + 1, right)
                }
                if (right < left) {
                    result = result ::: backtrack(s + ')', left, right + 1)
                }
                result
            }
        }

        backtrack("", 0, 0)
    }

    def main(args: Array[String]): Unit = {
        val n = 3
        val result = generateParenthesis(n)
        println(result)  // 输出 ["((()))","(()())","(())()","()(())","()()()"]
    }
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
tU95LmXaBSF2