题解 | #括号生成#
括号生成
https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca
go golang 笔记
事务原子性、通过【保证不影响同层所有if的判断】来划定本层操作。
package main /** * * @param n int整型 * @return string字符串一维数组 */ func generateParenthesis( n int ) []string { // write code here ans := []string{} path := "" var dfs func(int, int, string) dfs = func(left, right int, path string){ if left == n && right == n { ans = append(ans, path) return } //本层操作: //首先【扣除括号、填入path】要保证事务原子性。 //如果本层初始left符合if_1,【进入递归】扣一个left添入path,给剩下子串排序。 //如果本层初始right、left符合if_2,【进入递归】扣一个right填入path,给剩下子串排序。 //因此【扣除括号、填入path】操作应该在递归中,而不是在本层。否则会改变left、right初始值,影响本层if判断。 if left < n { // left++ // path = path + "(" //left++和path+保证事务原子性 dfs(left+1, right, path + "(") } if right < n && right < left { right++ //本题这样写,因为在函数最末段,所以不会影响本层if判断。 path = path + ")" dfs(left, right, path ) } } dfs(0,0,path) return ans }