
n 对括号(e.g. n=2, "()()"), 所有组合["(())", "()()", "())(", ")()(", ")(()", "))(("]。
这个如何用循环,而不是用递归实现呢?想了一晚上了,请大神赐教!
想法来源于 LeetCode 22 题,找到合理的括号,第一种暴力解法是看作二叉树然后递归遍历,但是循环怎么写没想出来。
1 jmc891205 2020 年 6 月 7 日 via iPhone 自己开一个栈去存当前状态就可以了 |
2 rockjike 2020 年 6 月 7 日 |
3 douglas1997 OP @rockjike 不是呀,是用循环去实现所有的可能性,不是原题。 |
4 douglas1997 OP @jmc891205 大神可否写一个伪代码我学习一下= = |
5 zackwu 2020 年 6 月 7 日 递归本质上就是循环+栈啊,不仅仅是这道题,理论上是可以把所有递归用栈改写为非递归形式,所以你可以去了解一下~ |
6 Yvette 2020 年 6 月 7 日 一个方法是先把递归改成尾递归,然后把尾递归的结果单独提出来,就可以很直观地改写成迭代写法了 |
7 leishi1313 2020 年 6 月 8 日 via Android 跟括号有什么关系,不就是个全排列+去重嘛 |
8 aguesuka 2020 年 6 月 8 日 via Android 不需要栈 for(int i=0;i< (i<<n);i++){ 如果 i 的第 m 位是 0 就是左括号,否则就是右括号 } |
9 aguesuka 2020 年 6 月 8 日 via Android ps 上面这个算法是针对主楼的,不是 leetcode 的 |
10 jmc891205 &bsp; 2020 年 6 月 8 日 via iPhone |