使用kotlin解决这个问题:22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 输入:n = 1 输出:["()"] 提示: 1 <= n <= 8
时间: 2024-02-13 09:05:56 浏览: 120
好的,这是一个经典的回溯算法问题。以下是使用 Kotlin 解决的代码:
```kotlin
class Solution {
fun generateParenthesis(n: Int): List<String> {
val result = mutableListOf<String>()
backtrack(result, "", 0, 0, n)
return result
}
private fun backtrack(
result: MutableList<String>,
current: String,
open: Int,
close: Int,
max: Int
) {
if (current.length == max * 2) {
result.add(current)
return
}
if (open < max) {
backtrack(result, "$current(", open + 1, close, max)
}
if (close < open) {
backtrack(result, "$current)", open, close + 1, max)
}
}
}
```
我们定义了一个 `Solution` 类,并在其中实现了 `generateParenthesis` 方法,该方法接受一个整数 `n`,代表要生成的括号对数,返回一个有效的括号组合列表。
在 `generateParenthesis` 方法中,我们首先创建一个空的结果列表 `result`,然后调用 `backtrack` 方法开始回溯。
在 `backtrack` 方法中,我们首先检查当前字符串长度是否等于 `max * 2`,如果是,说明已经生成了一个有效的括号组合,将其添加到结果列表中,然后返回。
如果当前左括号数量小于 `max`,我们可以在当前字符串后面添加一个左括号,并增加左括号数量,继续回溯。
如果当前右括号数量小于左括号数量,我们可以在当前字符串后面添加一个右括号,并增加右括号数量,继续回溯。
最终,当回溯结束时,我们会得到所有可能的有效括号组合。
阅读全文