码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode Generate Parentheses

时间:2015-01-11 21:31:35      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

Leetcode Generate Parentheses

标签:

原文地址:http://www.cnblogs.com/criseRabbit/p/4217098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!