博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]22.Generate Parentheses
阅读量:5701 次
发布时间:2019-06-17

本文共 1457 字,大约阅读时间需要 4 分钟。

【题目】

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:

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

【分析】

一般来说是用递归的方法,因为可以归结为子问题去操作。在每次递归函数中记录左括号和右括号的剩余数量,然后有两种选择,一个是放一个左括号,另一种是放一个右括号。需要特别注意的是剩余的右括号不能比左括号少,左括号右括号数量都要大于0。

如果只是要输出结果有多少组,那么直接用卡特兰数的公式就可以。关于卡特兰数,请参见

【代码】

/**********************************   日期:2015-01-23*   作者:SJF0115*   题目: 22.Generate Parentheses*   网址:https://oj.leetcode.com/problems/generate-parentheses/*   结果:AC*   来源:LeetCode*   博客:**********************************/#include 
#include
using namespace std;class Solution {public: vector
generateParenthesis(int n) { vector
result; DFS(result,n,n,""); return result; }private: void DFS(vector
&result,int left,int right,string path){ // 右括号的剩余数必须大于等于左括号的剩余数 if(right < left){ return; }//if // 左右括号用完 if(left == 0 && right == 0){ result.push_back(path); }//if // 左括号还有剩余 if(left > 0){ DFS(result,left-1,right,path+"("); }//if // 右括号还有剩余 if(right > 0){ DFS(result,left,right-1,path+")"); }//if }};int main(){ Solution solution; int n = 3; vector
result = solution.generateParenthesis(n); // 输出 for(int i = 0;i < result.size();++i){ cout<
<

你可能感兴趣的文章
NYOJ32:组合数(DFS入门)
查看>>
使用Callable和Future接口创建线程
查看>>
BZOJ 2568 比特集合
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
MongoDB培训
查看>>
机器学习开源项目精选TOP30
查看>>
python基础===对字符串进行左右中对齐
查看>>
将博客搬至CSDN
查看>>
IO获取文件路径及扩展名等(提供Demo)
查看>>
常用推荐系统算法总结
查看>>
layout图形化界面看不到内容 Failed to find the style corresponding to the id
查看>>
Java实现微信小程序支付(准备)
查看>>
【Error】SSL InsecurePlatform error when using Requests package
查看>>
【Python】日期模块总结
查看>>
python解决列表,字典输出打印unicode转中文显示
查看>>
14-删除文件/目录 - rm,rmdir
查看>>
C#ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决方法
查看>>
hdu 3460 Ancient Printer
查看>>
rails 的安装 - 《 Beginning Rails 3 》- 学习笔记2
查看>>
CListCtrl列表中,改写几列的文字颜色
查看>>