123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package main
- import (
- "fmt"
- )
- func main() {
- fmt.Println("hello" + "(")
- fmt.Println(generateParenthesis(3))
- }
- func generateParenthesis(n int) []string {
- result := []string{}
- left := 0
- right := 0
- strNow := ""
- var gobackfunc func(n int, left int, right int, strNow string)
- gobackfunc = func(n int, left int, right int, strNow string) {
- if right > left {
- return
- }
- if left == right && left == n {
- result = append(result, strNow)
- return
- }
- if left < n {
- gobackfunc(n, left+1, right, strNow+"(")
- }
- if left > right {
- gobackfunc(n, left, right+1, strNow+")")
- }
- }
- gobackfunc(n, left, right, strNow)
- return result
- }
- /*
- func generateParenthesis(n int) []string {
- //不能把result作为参数传过去,因为回溯后中,result是空的,也就是你append的都会被清掉
- result := []string{}
- left := 0
- right := 0
- strNow := ""
- var gobackfunc func(result []string, n int, left int, right int, strNow string)
- gobackfunc = func(result []string, n int, left int, right int, strNow string) {
- if right > left {
- return
- }
- if left == right && left == n {
- result = append(result, strNow)
- return
- }
- if left < n {
- gobackfunc(result, n, left+1, right, strNow+"(")
- }
- if left > right {
- gobackfunc(result, n, left, right+1, strNow+")")
- }
- }
- gobackfunc(result, n, left, right, strNow)
- return result
- }
- */
- /*
- func generateParenthesis(n int) []string {
- var generate func(left, right int, tmp []byte)
- res := make([]string, 0)
- generate = func(left, right int, tmp []byte) {
- if left == 0 && right == 0 {
- res = append(res, string(tmp))
- return
- }
- // 左括号还能放就优先放
- if left != 0 {
- tmp = append(tmp, '(')
- generate(left-1, right, tmp)
- tmp = tmp[:len(tmp)-1]
- }
- // 右括号数量不能大于左括号的,要不然合不回来,就不是合法数据了
- if right > left {
- tmp = append(tmp, ')')
- generate(left, right-1, tmp)
- tmp = tmp[:len(tmp)-1]
- }
- }
- generate(n, n, []byte{})
- return res
- }
- */
|