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