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:

"((()))", "(()())", "(())()", "()(())", "()()()"

还是类似的括号匹配问题,这次是要生成所有可能的匹配组合,思路如下:

首先用迭代法穷举可能出现的所有情况,然后利用已有的isValid()判断是否匹配,进而决定是否储存到返回vector容器中。

class Solution {
public:
vector<string> generateParenthesis(int n)
{
mSize = n * ;
init();
string s;
genpa(-, s);
return ret;
}
bool isValid(string s)
{
stack<char> stk;
int nSize = s.size(); for(int i = ; i!= nSize; ++i)
{
if(s[i] == '{' || s[i] == '(' || s[i]== '[')
{
stk.push(s[i]);
}
else
{
if(stk.empty())
{
return false;
}
char cElem = stk.top();
if(cElem - s[i] ==- || cElem - s[i] == -)
{
stk.pop();
continue;
}
else
{
return false;
}
}
}
if(!stk.empty())
{
return false;
}
return true;
}
void genpa(int j, string s)
{
if(j == mSize -)
{
if(isValid(s))
{
ret.push_back(s);
}
return;
}
for(int i = ; i!= ; ++i)
{
genpa(j+, s+album[i]);
}
}
void init(void)
{
album[] = '(';
album[] = ')';
}
private:
int mSize;
vector<string> ret;
char album[];
};

思路类似,多举一反三。

最新文章

  1. QTP操作excel文档
  2. String 与StringBuffer的区别与使用
  3. android 项目学习随笔九(ListView加头布局)
  4. ArcGIS Engine中的8种数据访问
  5. 设置(TableViewController)通用框架
  6. WinSock网络编程基础(3)server
  7. Java 将两个有序数组合成为一个有序数组
  8. TextMesh Pro SpriteAsset Load From Assetbundle
  9. Centos6.8 yum安装MySQL5.6
  10. jQuery AJAX 方法 success()后台传来的4种数据
  11. mac和Linux的环境变量设置
  12. 6-2 铁轨 uva 514
  13. Win2012&amp;Win2008双系统启动菜单设置
  14. DOS和批处理基本命令
  15. JAVA进阶之路(一)
  16. 反击黑客之对网站攻击者的IP追踪
  17. svn回退到具体的版本
  18. 从零开始的Python学习Episode 16——模块
  19. Golang学习途径总结
  20. ZOJ 2060 A-Fibonacci Again

热门文章

  1. Android基础------SQLite数据库(一)
  2. 苹果ATS特性服务器配置指南 HTTPS 安卓可以用 IOS 报错。
  3. 在Delphi中如何获得SQL中存储过程的返回值?
  4. VS2012完全卸载
  5. bzoj3992-序列统计
  6. kaptcha验证码在windows下正常,在linux下无法显示
  7. 【刷题】洛谷 P3804 【模板】后缀自动机
  8. BZOJ4570:[SCOI2016]妖怪——题解
  9. openjudge666:放苹果—题解
  10. Spring.NET中事务管理【转】