博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
careercup-递归和动态规划 9.6
阅读量:4614 次
发布时间:2019-06-09

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

9.6 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)。

类似leetcode:

解法:

从头开始构造字符串,从而避免出现重复字符串。在这个解法中,逐一加入左括号和右括号,只有字符串仍然有效。每次递归调用,都会有个索引指向字符串的某个字符。我们需要选择左括号或右括号,那么,何时可以用左括号,何时可以用右括号呢?

左括号:只有左括号还没有用完,就可以插入左括号

右括号:只有不造成语法错误,就可以插入右括号。何时出现语法错误?如果右括号比左括号还多,就会出现语法错误。

因此,我们只需记录允许插入的左右括号数目。如果还有左括号可用,就插入一个左括号然后递归。如果右括号比左括号好多(也就是使用中的左括号比右括号还多),就插入一个右括号然后递归。

C++实现代码:

#include
#include
#include
using namespace std;void helper(int left,int right,vector
&res,string &str){ if(left>right) return; if(left==0&&right==0) { res.push_back(str); return; } if(left>0) { str+='('; helper(left-1,right,res,str); str.pop_back(); } if(right>0) { str+=')'; helper(left,right-1,res,str); str.pop_back(); }}vector
generateParens(int n){ if(n<=0) return vector
(); vector
ret; string path; helper(n,n,ret,path); return ret;}int main(){ vector
res=generateParens(3); for(auto a:res) cout<
<

 

转载于:https://www.cnblogs.com/wuchanming/p/4150317.html

你可能感兴趣的文章
Eclipse连接mysql数据库jdbc下载(图文)
查看>>
Python中Selenium的使用方法
查看>>
三月23日测试Fiddler
查看>>
20171013_数据库新环境后期操作
查看>>
poj 1654 && poj 1675
查看>>
运维派 企业面试题1 监控MySQL主从同步是否异常
查看>>
Docker 版本
查看>>
poj 1753 Flip Game
查看>>
在深信服实习是怎样的体验(研发测试岗)
查看>>
Linux免密码登陆
查看>>
SpringMVC中文件的上传(上传到服务器)和下载问题(二)--------下载
查看>>
Socket & TCP &HTTP
查看>>
osip及eXosip的编译方法
查看>>
Hibernate composite key
查看>>
[CF Round #294 div2] D. A and B and Interesting Substrings 【Map】
查看>>
keepalived+nginx安装配置
查看>>
我的2015---找寻真实的自己
查看>>
android编译遇到问题修改
查看>>
解决Ubuntu18.04.2远程桌面Xrdp登录蓝屏问题
查看>>
Git的安装和使用教程详解
查看>>