LeetCode第21题之Generate Parentheses(两种解法)

2024-06-20 15:18

本文主要是介绍LeetCode第21题之Generate Parentheses(两种解法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++代码:
解法一(在LeetCode上运行效率高于解法二):

#include <vector>
#include <iostream>
#include <string>
using namespace std;class Solution {
private:vector<string> res;
public: //leftRemain保存还可以放左括号的数目,rightRemain保存还可以放右括号的数目void dfs(string state, int leftRemain, int rightRemain){//这种情况括号不匹配if (leftRemain > rightRemain){return;}if (0 == leftRemain && 0 == rightRemain){res.push_back(state);return;}if (leftRemain > 0){dfs(state + "(", leftRemain -1, rightRemain);}if (rightRemain >0 ){dfs(state + ")", leftRemain, rightRemain-1);}}vector<string> generateParenthesis(int n) {dfs("",n,n);return res;}
};int main()
{Solution s;vector<string> r = s.generateParenthesis(3);for (vector<string>::iterator it = r.begin();it != r.end();++it){cout<<*it<<endl;}return 0;
}

解法二:

#include <vector>
#include <iostream>
#include <string>
using namespace std;class Solution {
private://保存结果vector<string> res;
public:void fun(int deep, int n, int leftNum, int leftTotalNum, string s){//如果左括号的总数大于n,则该字符串不可能满足要求if (leftTotalNum  > n){return;}//如果到达最底层,则s一定满足题意。因为运行到这里时,leftTotalNum<=n,而leftNum>=0if (n*2 == deep){res.push_back(s);return;}for (int i=0;i<2;++i){if (0 == i){//在deep+1的位置放左括号fun(deep+1, n, leftNum+1, leftTotalNum+1, s + "(");}else{//如果有剩余未匹配的左括号数,才能放右括号if (leftNum > 0){fun(deep+1, n, leftNum-1, leftTotalNum, s + ")");}}}}vector<string> generateParenthesis(int n) {//剩余未匹配的左括号数int leftNum = 0;//字符串中左括号总数int leftTotalNum =0;string s = "";fun(0, n, leftNum, leftTotalNum, s);return res;}
};int main()
{Solution s;vector<string> r = s.generateParenthesis(3);for (vector<string>::iterator it = r.begin();it != r.end();++it){cout<<*it<<endl;}return 0;
}

这篇关于LeetCode第21题之Generate Parentheses(两种解法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1078495

相关文章

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总