输出合法的括号

题目

给定一个n,要求输出所有的n对括号的组合。
如n=2
(()),()(),

思路

除了递归,还可以用动态规划,第一个出现的肯定是 ( ,对于每个‘)’的出现位置,肯定是在( 之后,
假设n=1,只有一种()
假设n=2,((,那么右括号的放置位置就有两个地方,就可以记为dp[0]*dp[1]+dp[1]*dp[0]
n = 3 同理。

代码

def kuohao(n):
  dp = [0]*(s+1)
  dp[0] = dp[1] = 1
  for i in range(2,s+1):
    for left in range(0,i):
      dp[i] += dp[left] * dp[i-left-1]
  return dp[-1]

你可能感兴趣的:(动态规划)