LeetCode系列:22. 括号生成(golang版)

  • 题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
 
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:
输入:n = 1
输出:["()"]
 
提示:
1 <= n <= 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  • 思路
    1、基本思路是利用递归,穷尽各种可能
    2、利用剪枝思想,去掉不合理的可能,减少递归次数
    3、左括号和右括号都最多有n个,且右括号不可能在前面,所以右括号的使用数量在任何时候都是小于等于左括号的,这两个条件就够
  • 代码
func generateParenthesis(n int) []string {
	var res []string
	gen(n,0,0,"",&res)
	return res
}
//left和right分别为左右括号已使用的个数,str保存字符串,res保存满足题意的所有结果
func gen(n int, left int , right int, str string, res *[]string){
	if left == n && right == n {
		*res = append(*res,str)
		return
	}
	if left < n {
		gen(n,left+1,right,str+"(",res)
	}
	if right < n && left > right {
		gen(n,left,right+1,str+")",res)
	}
}
  • 测试代码
package main

import "fmt"

func main() {
	res := generateParenthesis(3)
	for _,v := range res {
		fmt.Println(v)
	}
}

func generateParenthesis(n int) []string {
	var res []string
	gen(n,0,0,"",&res)
	return res
}
//left和right分别为左右括号已使用的个数,str保存字符串,res保存满足题意的所有结果
func gen(n int, left int , right int, str string, res *[]string){
	if left == n && right == n {
		*res = append(*res,str)
		return
	}
	if left < n {
		gen(n,left+1,right,str+"(",res)
	}
	if right < n && left > right {
		gen(n,left,right+1,str+")",res)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值