1. Generate Parentheses My Submissions QuestionEditorial Solution

    Total Accepted: 86957 Total Submissions: 234754 Difficulty: Medium

    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:

“((()))”, “(()())”, “(())()”, “()(())”, “()()()”

思路:

f(1)="()"
f(2)="("+f(1)+")"||"()"+f(1)||f(1)+"()"
...
f(n)="("+f(n−1)+")"||f(1)f(n−1)||f(2)f(n−2)||...||f(n−1)f(1)

注意,这其中计算时每次可能都会有重复,所以自底向上迭代时,在底层依次去重,可以节省大量内存空间,内层循环次数也会减少。

class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<vector<string>> res(n+1);
res[1].push_back("()");
for(int i=2;i<=n;++i){ //有i组括号的时候,自底向上迭代
vector<string> vs;
for(int j=1;j<i;++j){ //f(j)f(i-j)的结果组合起来
for(int p=0;p<res[j].size();++p){
for(int q=0;q<res[i-j].size();++q){
vs.push_back(res[j][p]+res[i-j][q]);
}
if(j==i-1)vs.push_back("("+res[j][p]+")");
}
}
sort(vs.begin(),vs.end());
vs.erase(unique(vs.begin(),vs.end()),vs.end());
res[i] = vs;
}
sort(res[n].begin(),res[n].end());
res[n].erase(unique(res[n].begin(),res[n].end()),res[n].end());
return res[n];
}
};

最新文章

  1. 特征描述之LBP
  2. Codeforces Round #383 (Div. 2) D 分组背包
  3. Javascript之confirm的用法
  4. [Redis]如何通过Powershell创建Redis服务
  5. 使用hue+oozi构建任务调度系统
  6. kali2 ssh
  7. 转载:C++ map的基本操作和使用
  8. 关于javac编译时出现“非法字符:\65279”的解决方法
  9. xcode 必用插件二
  10. Qt之VLFeat SLIC超像素分割(Cpp版)
  11. IIS下访问网络驱动器(网络位置)
  12. 个人对于epollhup的理解
  13. 《Java8实战》读书笔记
  14. PHP 多维数组排序 函数怎么保持数字键不被重新索引
  15. shell指令(一)
  16. Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
  17. this和e.target的异同
  18. ML.NET 0.9特性简介
  19. ubuntu12.04 64bit libncurses5-dev和libncurses5-dev:i386共存性问题讨论
  20. 深入理解苹果系统(Unicode)字符串的排序方法

热门文章

  1. vs2017和Qt5的字符编码问题
  2. 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析
  3. u-boot 1.1.6 start.S 代码学习&lt;转&gt;
  4. 三、其他主机安装zabbix-agent加入到zabbix
  5. mysql 导入sql文件
  6. Spring源码学习之容器的基本实现(一)
  7. supervisor安装
  8. uni-app map组件关于marker标记点动态设置的问题
  9. 菜鸡的Java笔记 第四 - java 基础运算符
  10. php开发微信公众号(1)