Table of Contents
Problem
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: ["()"]
Constraints:
1 <= n <= 8
Solution
此題要我們列出所有括弧的可能組合,因此我們可以用 backtracking 來解。雖然 backtracking 可以找出所有的組合,但是有些組合是不合法的。以下是一個合法的括弧組合。

讓我們來看一個不合法的括弧組合。一開始先放一個右括弧,這就使得接下來不管怎麼放,都不會得出一個合法的組合。依據這個例子,我們可以觀察出,當右括弧的剩餘數量大於或等於左括弧的剩餘數量時,我們就不可以放右括弧。

Backtracking
- Time:
- Space:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> results = new ArrayList<>();
dfs(n, n, new StringBuilder(), results);
return results;
}
private void dfs(int left, int right, StringBuilder prefix, List<String> results) {
if (left == 0 && right == 0) {
results.add(prefix.toString());
}
if (left > 0) {
prefix.append('(');
dfs(left - 1, right, prefix, results);
prefix.deleteCharAt(prefix.length() - 1);
}
if (right > left) {
prefix.append(')');
dfs(left, right - 1, prefix, results);
prefix.deleteCharAt(prefix.length() - 1);
}
}
}參考
- 22. Generate Parentheses, LeetCode.
- 22. Generate Parentheses, LeetCode Solutions.









