22-括号生成

这道题几乎用了我一天的时间也没做出来,看题解都看了半天,,,通过这道题又接触到了另一个我以前一点也不像碰的东西,回溯。。。

这道题要判断所有可能的括号组合,给定n代表括号的对数,此时能够知道每个组合中都会有n个"("和n个")",用l代表“(”的数量,r代表“)”的数量。当l<n时,就可以添一个“(”,然后把新的字符串作为参数传给该函数,这道题要得到正确解得保证每一步时的l>=r的。所以当r<l时可以给字符串添一个“)”作为新字符串再传给该函数,一直到字符串的长度等于2*n

这道题要保证每一步的“(”的数量大于等于")",只要每一步都保证,就不会出现())的情况,然后每一步都符合条件,那么最后的结果也就会符合条件了。

当l<n && l>r时就会有两种选择,要么添加一个“(”,要么添加一个")"都可以,这两种情况都要进入下一步回溯。

另外golang的函数也可以传入一个变量的地址,通过这个指针修改变量则都会被修改。

代码如下:

22-括号生成