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:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

给定一个数字表示有多少对括号,根据这些括号生成括号集合。

这个题比较有难度。运用到了回溯算法。搞不太懂。

往字符串中加括号,在符合要求的情况下,可以加左括号或者右括号,所以在符合要求下对这两种情况进行尝试,在不符合时,就直接返回上一层继续探索(这里不作处理也就是返回上一次调用了)

题目给定n表示n对括号,就有n个左括号和n个右括号,我们定义两个变量left和right分别表示字符串中左括号的个数和右括号的个数。如果字符串中右括号的个数大于左括号的个数,这就会出现)(的情况,所以不作处理,直接返回。当左括号的个数小于n时,这个时候就可以添加左括号,右括号个数小于左括号时,可以添加右括号。也就是说,两种情况都可以,所以都进行尝试。当字符串长度和n*2相等时就可以添加到List中了。

class Solution {
public List<String> generateParenthesis(int n) {
/* */
List<String> list=new ArrayList<>();
helper(list,"",0,0,n);
return list;
}
/*
求n时的括号组合。
left表示此时字符串中左括号的个数,right表示字符串中右括号的个数,
*/
public void helper(List<String> list,String str,int left,int right,int n){
if(str.length()==n*2){
list.add(str);
return ;
} //当left小于n时,表示还可以添加左括号,当left大于right时,表示可以添加右括号
//注意:该字符串中,左括号的个数不可能小于右括号的个数,因为这样就是无效的输出。
if(left<n)
helper(list,str+"(",left+1,right,n);
if(left>right)
helper(list,str+")",left,right+1,n);
}
}
												

generate parentheses(生成括号)的更多相关文章

  1. [CareerCup] 9.6 Generate Parentheses 生成括号

    9.6 Implement an algorithm to print all valid (e.g., properly opened and closed) combinations of n-p ...

  2. [LintCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  3. [LeetCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  4. [leetcode]22. Generate Parentheses生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  5. [LeetCode] 22. Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  6. 022 Generate Parentheses 生成括号

    给 n 对括号,写一个函数生成所有合适的括号组合.比如,给定 n = 3,一个结果为:[  "((()))",  "(()())",  "(())() ...

  7. 22.Generate Parentheses[M]括号生成

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  8. LeetCode OJ:Generate Parentheses(括号生成)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  9. 22. Generate Parentheses生成指定个括号

    生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边) 思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号 有点像 ...

随机推荐

  1. MonoBehaviour介绍(Unity3D开发之一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=486 猴子自学Unity已经一段 ...

  2. Cocos2d-x 添加iOS7默认分享/AirDrop

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=530 下午添加分享的时候,看着这 ...

  3. UNIX环境高级编程——信号(API)

    一.信号在内核中的表示     实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号 ...

  4. pycharm+django之小试牛刀

    准备好好学习一下python,就从django开始吧,顺带了解一下网站的开发.今天在windows上安装了python,django,以及酷炫吊的IDE--pycharm,学习资料主要是<the ...

  5. TCP的ACK确认系列 — 快速确认

    主要内容:TCP的快速确认.TCP_QUICKACK选项的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 快速确认模式 (1) 进入快速确认模式 ...

  6. 过时api LocalActivityManager 作用

    换了个新工作,看公司代码还在用LocalActivityManager类 不知道是个什么东西,百度了也没具体介绍查了下sdk是这样介绍的 LocalActivityManager是一个助手类,在同一个 ...

  7. PA 模块常用表2

    SELECT * FROM pa_expenditure_items_all  项目支出 select *from pa_cost_distribution_lines_all  支出分配行 SELE ...

  8. R12中注册客户化应用为多组织应用

    Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...

  9. H5学习之旅-H5的元素属性(3)

    1.标签可以拥有属性,为标签提供更多的信息 2.属性以键值对的形式呈现例如:href = "www.baidu.com" 3.常用标签属性 :align对其方式 ,对齐方式,包括上 ...

  10. 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,

     准备条件, 编写一个web项目.编写一个servlet,若用户名为lisi,密码为123,则返回"登录成功",否则"登录失败".项目名为ServerIth ...