【
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
对C语言而言,这道题真的不简单,有几个点需要注意。
返回值是char型的二维数组,所以必须知道二维数组的申请方式,malloc一次后再for循环malloc一次。其中还要考虑二维数组传参问题,不过malloc方式申请的二维数组的,直接传指针就好了。
然后需要使用深度搜索DFS算法。对于嵌入式类的开发人员,最忌讳的就是使用递归,因为栈空间非常有限,一不小心就容易爆栈。而DFS的算法就是使用递归的思想,适应起来要克服一定的困难。
接着在DFS函数内每匹配一个有效括号组合,就需要及时拷贝进数组,memcpy。
最后才是此题的DFS思想,已使用的左括号可以比右括号多,但使用的右括号一定不能比左括号多。算法便是当还有剩余左括号,可以继续dfs下去。仅仅当剩余左括号比右括号少,才可以添加右括号dfs下去。
此题值得多看几遍。