标签:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
对于这道题,需要尝试全部的排列组合,这就想到了用DFS,n对括号,就是n个左括号和n个右括号,然后我们拼装string,如果左括号有剩余,就+一个左括号,如果右括号有剩余,就+一个右括号,如果剩余的左括号的个数大于右括号的个数,则这是不符合规则的,因为当前的string中必定存在“)(”这样的组合,应直接舍弃返回。
如果剩余的左括号的个数为0,并且剩余的右括号的个数为0,则是将所有的左右括号都匹配完了,则在List中增添新的组合,并返回
1 package Generate.Parentheses; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class GenerateParentheses { 7 public List<String> generateParenthesis(int n) { 8 List<String> result =new ArrayList<String>(); 9 String currString=""; 10 dfs(result,currString,n,n); 11 return result; 12 } 13 //尝试所有的结果进行匹配 14 public void dfs(List<String> list,String currString,int left,int right){ 15 //剩余的左括号个数大于剩余的右括号的个数,此时出现的是“)(”这种情况,不符合规则 16 if(left>right) return; 17 //剩余左括号和右括号数都为0,说明匹配完成,list中增加新的匹配结果,并返回 18 if(left==0&&right==0) 19 { 20 list.add(currString); 21 return; 22 } 23 //如果左括号剩余的个数大于零,就在当前的字符串中增加左括号,剩余左括号数-1 24 if(left>0) 25 dfs(list,currString+"(",left-1,right); 26 if(right>0) 27 dfs(list,currString+")",left,right-1); 28 } 29 30 }
标签:
原文地址:http://www.cnblogs.com/criseRabbit/p/4217098.html