一、题目描述
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的
括号组合。
示例 1
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2
输入:n = 1
输出:["()"]
提示:1 <= n <= 8
二、代码
代码如下:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
str1 = ["()"]
str2 = ["()()","(())"]
if n == 1:
return str1
if n == 2:
return str2
else:
str = ""
result = ["()()","(())"]
for count in range(n-2):
str2 = result.copy()
for n in range(len(str2)):
for i in range(len(str2[n])):
if str2[n][0:i]+ "()" + str2[n][i:len(str2[n])] not in result:
result.append(str2[n][0:i] + "()" + str2[n][i:len(str2[n])])
for j in range(len(str2)):
result.pop(0)
return result
三、解题思路
PS:个人能力有限,不考虑时间空间最优。
本题采用的方法是在原本括号序列的每一个空位上添加一个完整的“()”
,这样添加后的新括号序列保证为符合条件的。
例如:在原本只有一个括号的列表(["()"]
)中插入新的一个括号("()"
),则可插入的位置如下:
↓ | ( | ↓ | ) | ↓ |
---|---|---|---|---|
可插入"()" | 可插入"()" | 可插入"()" |
不难发现,可插入的地方就是每个括号字符的两边,但这样插入括号则会出现重复的情况,所以需要用一个简单的判断去判断该字符串是否已被包含,最后再输出符号列表。