leetcode:Generate Parentheses

来源:互联网 发布:淘宝代运营被骗 编辑:程序博客网 时间:2024/05/22 16:52
题意是:现有n对括号,问这些括号共能组成多少合法的字符串
比如n=3,对应的字符串数组就是:
[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

这道题自己想到的思路是:每次在当前串中插入一个左/右括号,并且始终保证左括号数量不大于右括号(不然就会出现有右括号无法匹配到左括号的情况)。递归终结条件是判定左括号数量为0,然后一次性把剩下的右括号插入字符串,然后就得到一个新的符合条件的字符串,加入到ans数组中。这样效率较高,且不会出现重复的情况。

之前考虑过DP,但没想好状态方程,总会出现相同字符串的情况,比如()(.....),很可能在后面就会得到一个(......)()这样形式的字符串,而两者的形式完全相同:()(......)()

后来看论坛大神的介绍,发现只需要考虑一头就行,状态转移方程写成下面的形式即可:
DP[n]='('+DP[k]+')'+DP[n-k-1];
每次在开头加入总的一个括号,就不用担心后面出现相同的情况了。
原创粉丝点击