# 括号生成

<p>数字 <code>n</code> 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 <strong>有效的 </strong>括号组合。</p><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>n = 3<strong><br />输出：</strong>["((()))","(()())","(())()","()(())","()()()"]</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>n = 1<strong><br />输出：</strong>["()"]</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>1 <= n <= 8</code></li></ul>

## template

```java
class Solution {
	void gen(Stack<String> p, int lc, int rc, List<String> r, int n) {
		if (lc > n) {
			return;
		}
		if (lc == n && rc == n) {
			StringBuilder sb = new StringBuilder();
			for (String l : p) {
				sb.append(l);
			}
			r.add(sb.toString());
		}
		p.push("(");
		lc++;
		gen(p, lc, rc, r, n);
		p.pop();
		lc--;
		if (lc > rc) {
			p.push(")");
			rc++;
			gen(p, lc, rc, r, n);
			p.pop();
			rc--;
		}
	}
	public List<String> generateParenthesis(int n) {
		List<String> results = new ArrayList<String>();
		Stack<String> p = new Stack<String>();
		gen(p, 0, 0, results, n);
		return results;
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```