LeetCode Algorithm 22. 括号生成

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 22. 括号生成相关的知识,希望对你有一定的参考价值。

22. 括号生成

Ideas

这是一道动态规划的题目,关于动态规划的题目我们可以从n比较小的情况下开始逐步分析。

当n=1时,["()"]

当n=2时,["()()", “(())”]

当n=3时,["()()()", “(()())”, “()(())”, “(())()”, “((()))”]

什么意思呢?

当n=1,也就是只有一对括号时,只有一种情况。

当n=2时,其实是在只有一对括号的情况下添加一对括号,可以添加在左边,也就是"()()",可以直接在外面套一层括号,也就是"(())",添加到右边的情况就和添加到左边的情况一样的了。

同理,当n=3时,我们是在n=2的所有情况中添加一对括号,添加的形式有三种,左边、右边、外面套一层。

以此类推,如果我们知道了 i < n 时的所有情况,就可以对所有情况进行组合遍历:

f"(i = p 时的所有情况)i = n - 1 -p 时的所有情况"

可以把 i = p 时的所有情况 定义为p,i = n - 1 -p 时的所有情况 定义为 q。

然后就是遍历组合啦。

Code

Python

class Solution:
	def generateParenthesis(self, n: int) -> List[str]:
		total = [[""]]
		for i in range(1, n + 1):
			cur = list()  # 用于存储增加一对括号后可能生成的所有情况
			for j in range(i):
				item_p = total[j]
				item_q = total[i - 1 - j]
				for p in item_p:
					for q in item_q:
						cur.append(f"(p)q")
			total.append(list(cur))
		return total[n]

以上是关于LeetCode Algorithm 22. 括号生成的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 22 生成括号

leetcode-22 括号生成

leetcode-22括号生成

LeetCode22:括号生成

LeetCode22. 括号生成

LeetCode- 22. 括号生成