题解 | #括号生成#

括号生成

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
}

全部评论

相关推荐

野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务