LeetCode 22. Generate Parentheses

Posted CrazyCoder1992

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 22. Generate Parentheses相关的知识,希望对你有一定的参考价值。

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Example 1:

Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]

Example 2:

Input: n = 1
Output: ["()"]

题解:

读题理解提议,题目要求为列举出包含n对括号的所有组合,并按字典顺序输出,看起来并不像一道动态规划题。
在没有思路的情况下,首先列举出简单场景,寻找其中的规律。

n = 1, ()
n = 2, (()), ()()
n = 3, ((())), (()()), (())(), ()(()), ()()()

通过观察可以发现,括号组合可简单分为以下2种:

  1. 整个字符串为一个大整体,即第一个 “(” 对应最后一个 “)”,不可切割;
  2. 字符串由多个合法的括号组合进行拼接组成,即可切割为多个子字符串,每个字符串都是合法的括号组合。

进一步分析,可得:

  1. 第一种字符串由其上方一层的字符串在外围使用一对括号包裹得到;
  2. 第二种字符串由其上方多层中的某2个字符串前后拼接而成,其括号的个数是那2个字符串的括号个数之和。

假设 f ( i ) f(i) f(i) 代表 n = i n = i n=i 时的结果,可得到以下递推公式:
f ( 1 ) = [ ‘ ‘ ( ) " ] f(1) = [``()"] f(1)=[‘‘()"]
f ( i ) = s o r t ( d i s t i n c t ( [ ‘ ‘ ( " + Σ f ( i − 1 ) + ‘ ‘ ) " , Σ f ( j ) + Σ f ( k ) ] ) ) , 其中 i = j + k f(i) = sort(distinct([ ``(" + \\Sigma f(i-1) + ``)", \\Sigma f(j) + \\Sigma f(k)])), 其中 i = j + k f(i)=sort(distinct([‘‘("+Σf(i1)+‘‘)",Σf(j)+Σf(k)])),其中i=j+k

接下来再根据递推公式编程就很简单了:

import "sort"

func generateParenthesis(n int) []string 
	prths := make([][]string, n)
	var set map[string]bool
	for i := 1; i <= n; i++ 
		if i == 1 
			prths[i-1] = []string"()"
			continue
		

		set = map[string]bool
		for _, p := range prths[i-2] 
			set["("+p+")"] = true
			for j := 1; j < i; j++ 
				k := i - j
				if j > k 
					break
				
				for _, pj := range prths[j-1] 
					for _, pk := range prths[k-1] 
						set[pj+pk] = true
						set[pk+pj] = true
					
				
			
		
		tmpPrths := make([]string, 0)
		for p := range set 
			tmpPrths = append(tmpPrths, p)
		
		sort.Strings(tmpPrths)
		prths[i-1] = tmpPrths
	
	return prths[n-1]


以上是关于LeetCode 22. Generate Parentheses的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 22. Generate Parentheses

leetcode22. Generate Parentheses

leetcode 22 -- Generate Parentheses

[leetcode-22-Generate Parentheses]

LeetCode 22. Generate Parentheses

LeetCode 22. Generate Parentheses