题目:
分析:采用递归的方法,分别记录左括号数和右括号数,
- 如果左括号数大于右括号数,既可以加左括号,又可以加右括号;
- 否则,只可以加左括号;
- 直到左括号数为n,然后补齐右括号即可。
public class Solution {
/**
* @param n: n pairs
* @return: All combinations of well-formed parentheses
*/
public List<String> generateParenthesis(int n) {
// write your code here
List<String> list=new ArrayList<>();
String temp=new String();
getgenerateParenthesis(list,temp,n,0,0);
return list;
}
public void getgenerateParenthesis(List<String> list,String temp,int n,int leftnum,int rightnum){
if(leftnum==n){
for(int i=0;i<n-rightnum;i++){ //补齐右括号
temp+=")";
}
list.add(new String(temp));
return;
}
getgenerateParenthesis(list,temp+"(",n,leftnum+1,rightnum);
if(leftnum>rightnum){
getgenerateParenthesis(list,temp+")",n,leftnum,rightnum+1);
}
}
}