题解 | #括号生成#
括号生成
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
}
