题目: 括号生成
来自智得网
分析
首先尝试暴力破解
暴力破解
n对括号一共有2n个字符,题目要求是将这2n个字符(n个“(”,那个“)”)放入合适的位置。
首先从2个位置中选择n个位置放置“(”,
剩余的n个位置放置“)”,
括号如果有效,则要求无轮在任何位置左括号的数量都不能小于右括号的数量,对上述放置方式进行检查,判断该方式是否有效,如果无效则剔除该方式,剩余的就是有效的括号生成方式。
从2n个字符中选择n个位置放置“(”,可以使用回溯法解决此类组合问题。
回溯法
组合问题,每一个步骤都涉及到选择。
括号生成题目中的选择是每次选择一个字符,“(”或者“)”。
选择过程中,需要满足某些条件才能生成有效的组合:
循环过程中分别计算左括号和右括号的数量。
本轮选择之后,左括号和右括号的数量都已经达到了n,则本次选择结束,会生成一条有效的括号组合。
在选择过程中,如果右括号的数量大于了左括号的数量,则该组合无效。
每次选择一个符号,从数据结构上来看,会形成一个排列树。