题目:
分析:采用递归的方法,分别记录左括号数和右括号数,
- 如果左括号数大于右括号数,既可以加左括号,又可以加右括号;
- 否则,只可以加左括号;
- 直到左括号数为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); } } }