Question:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
给定n个括号,写一个函数来生成所有组合形成括号。
For example, given n = 3, a solution set is:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
n==3,则给出所有三个括号的组合。
Answer:
递归+回溯。
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<String> list = new ArrayList<String>();
public List<String> generateParenthesis(int n){
AddElement("",n,0);
return list;
}
// left 为剩余左括号数,right 为剩余未匹配的右括号数目
初始为n个剩余左括号数,0个未匹配右括号数,左括号数每减一个,则未匹配的右括号数增加一个。
public void AddElement(String str, int left, int right){
if(left==0 && right==0){
list.add(str);
return;
}
if(left>0){
String s = str+"(";
AddElement(s,left-1,right+1);
}
if(right>0){
String s = str+")";
AddElement(s,left,right-1);
}
}
}