LeetCode 22. Generate Parentheses(构造)
2016-02-04 13:22
253 查看
题目大意:给n个'(' 和 ')',构造出所有的长度为2*n并且有效的(可匹配的)字符串。
题目分析:这道题不难,可以直接搜索出所有可能的字符串,然后再逐一判断是否合法即可。但是还有更好的办法,实际上,“判断是否合法”这一操作是冗余的,如果可以直接朝着满足可匹配性的方向进行构造,就可避免这一冗余操作,这需要换一个角度思考。
一个有效(可匹配)字符串中, '(' 的个数决定了 ')' 的个数(从左向右看)。所以,初始时,可以看成是 “有n个 '(' 还没有用、有0个 ')' 必须要用”。这样,在搜索的时候就能避开无效(不可匹配)的情况。
代码如下:
题目分析:这道题不难,可以直接搜索出所有可能的字符串,然后再逐一判断是否合法即可。但是还有更好的办法,实际上,“判断是否合法”这一操作是冗余的,如果可以直接朝着满足可匹配性的方向进行构造,就可避免这一冗余操作,这需要换一个角度思考。
一个有效(可匹配)字符串中, '(' 的个数决定了 ')' 的个数(从左向右看)。所以,初始时,可以看成是 “有n个 '(' 还没有用、有0个 ')' 必须要用”。这样,在搜索的时候就能避开无效(不可匹配)的情况。
代码如下:
class Solution { private: void dfs(vector<string>& s,string p,int n,int m){///已经构造好的字符串为p,还剩n个'('可用,并且必须要用m个')'。 if(n==0&&m==0){ s.push_back(p); return ; } if(m>0) dfs(s,p+')',n,m-1); if(n>0) dfs(s,p+'(',n-1,m+1); } public: vector<string> generateParenthesis(int n) { vector<string>s; dfs(s,"",n,0); return s; } };
相关文章推荐
- C#成神之路<9> C#引用数据类型扩展
- 【Android】3.6 地图基本控制方法
- window mysql安装步骤
- servlet复习(五)cookie管理
- MYSQL建立索引需要注意几点
- ZOJ 1002:Fire Net
- 哈理工OJ 1692【水题】
- [LeetCode] Longest Substring Without Repeating Characters (LinkedHashSet的妙用)
- [C++]string中文的匹配问题
- 文本文件与字符编码
- 轻蔑这个,鄙视那个,眼高手低,好高骛远,有点料就忍不住到处兜售
- torch学习笔记(二)
- 利用51单片机制作廉价盒仔机器人
- order by多个字段对索引的影响
- C 语言结构体定义 使用
- HDU 1045:Fire Net
- 【贪心】[BZOJ1034]泡泡堂BNB
- Eclipse+Maven创建webapp项目
- 不要随随便便的distinct和order by
- OC中通知使用浅析