题目: 括号生成

来自智得网
跳转至: 导航、​ 搜索

分析

首先尝试暴力破解

暴力破解

n对括号一共有2n个字符,题目要求是将这2n个字符(n个“(”,那个“)”)放入合适的位置。

首先从2个位置中选择n个位置放置“(”,

剩余的n个位置放置“)”,

括号如果有效,则要求无轮在任何位置左括号的数量都不能小于右括号的数量,对上述放置方式进行检查,判断该方式是否有效,如果无效则剔除该方式,剩余的就是有效的括号生成方式。

从2n个字符中选择n个位置放置“(”,可以使用回溯法解决此类组合问题。

回溯法

N=2时候的回溯法演示

组合问题,每一个步骤都涉及到选择。

括号生成题目中的选择是每次选择一个字符,“(”或者“)”。

选择过程中,需要满足某些条件才能生成有效的组合:

循环过程中分别计算左括号和右括号的数量。

本轮选择之后,左括号和右括号的数量都已经达到了n,则本次选择结束,会生成一条有效的括号组合。

在选择过程中,如果右括号的数量大于了左括号的数量,则该组合无效。

每次选择一个符号,从数据结构上来看,会形成一个排列树。