题解 | #括号生成#递归回溯
括号生成
https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca
package main
import "fmt"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return string字符串一维数组
*/
func generateParenthesis( n int ) []string {
// write code here
var res []string
// generate(n,n,[]byte{}, &res)
backtrack(n, n, "", &res)
fmt.Println(res)
return res
}
func generate(leftc, rightc int, path []byte, res *[]string){
if leftc==0 && rightc==0{
*res = append(*res, string(path))
return
}
if leftc == rightc {
path = append(path, '(')
generate(leftc-1, rightc, path, res)
path = path[:len(path)-1]
}
if leftc<rightc{
if leftc>0{
path = append(path, '(')
generate(leftc-1, rightc, path, res)
path = path[:len(path)-1]
}
path = append(path, ')')
generate(leftc, rightc-1, path, res)
path = path[:len(path)-1]
}
}
func backtrack(left, right int, str string, res *[]string){ //递归
if left==0 && right==0{
*res = append(*res, str)
return
}
// 使用新的字符串变量,所以无需回溯
if left>0{
backtrack(left-1, right, str+"(", res)
}
if left<right{
backtrack(left, right-1, str+")", res)
}
}
