首页 > 其他分享 >leetcode 22 括号生成

leetcode 22 括号生成

时间:2023-09-20 19:55:30浏览次数:2613  
标签:22 lnum ++ 括号 int ans leetcode rnum

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

提示:

  • 1 <= n <= 8   //这种用例很可能就是递归

代码:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        string s = "";
        f(n,ans,s,0,0,0);
        return ans;
    }
//掌握全局思路做 void f(int n,vector<string>&ans,string s,int i,int lnum,int rnum){ //i 下标位置 lnum 左括号数 rnum 有括号数 n 括号对数 //只有正确的情况才会加一个'(' 或')' if(i == 2*n){ //把握好边界条件,生够括号就结束 ans.push_back(s); return; } if(i == 0){ //第一个位置只能是 '(' s+='('; lnum++; f(n,ans,s,i+1,lnum,rnum); } else if(i == 2*n-1){ //最后一个位置只能是')' s+=')'; rnum++; f(n,ans,s,i+1,lnum,rnum); }else{ //中间位置 if(lnum == n){ //如果'('够n个 剩余全加')' s+=')'; rnum++; f(n,ans,s,i+1,lnum,rnum); }else{ //中间位置 s+='('; //只要'('不够n个就可以加'(',中间任意位置都可以加 lnum++; f(n,ans,s,i+1,lnum,rnum); lnum--; //虽然传的不是引用,但这里是同层调用,也需要回溯到原来的样子 if(rnum < lnum){ //如果')'个数小于'('的,这个位置还可以加')',如果已经等于了,那是只能加'('的。不可能出现大于,因为是按正确情况走的。 s = s.substr(0,s.size()-1); s+=')'; rnum++; f(n,ans,s,i+1,lnum,rnum); } } } } };

 

标签:22,lnum,++,括号,int,ans,leetcode,rnum
From: https://www.cnblogs.com/fyjie/p/17718238.html

相关文章

  • 【LeetCode】LCP 06. 拿硬币
    描述桌上有​​n​​​堆力扣币,每堆的数量保存在数组​​coins​​中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例输入:​​[4,2,1]​​输出:​​4​​解释:第一堆力扣币最少需要拿2次,第二堆最少需要拿1次,第三堆最少需要拿1次,......
  • 22 Z-index 和透明度
    /opacity:背景透明度/<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>#box{width:300px;height:200px;border:#5a99a83p......
  • QA|Pycharm update时报错ssh: connect to host github.com port 22: Connection timed
    场景:另一台电脑很久没有链接Github了,今天执行update失败,报错如下:2023/9/2015:09UpdatefailedFunny_ScriptsandSpider:Connectionresetby20.205.243.166port22Couldnotreadfromremoterepository.Please......
  • dns缓存中毒43.227.199.x
    什么是DNS缓存中毒DNS缓存中毒是一种网络攻击,它使您的计算机误以为它会到达正确的地址,但事实并非如此。攻击者使用DNS缓存中毒来劫持互联网流量并窃取用户凭据或个人数据。DNS缓存中毒攻击也称为DNS欺骗,它试图诱骗用户将其私人数据输入不安全的网站。什么是DNS缓存在讨论攻击之......
  • 揭秘ES2022令人兴奋的语言特性
    大家好!我是星辰编程理财。今天我分享一篇关于ES2022(ES13)的文章,它将介绍ES2022的语言特性和功能,包括内置可索引对象的.at()方法、Errorcause(错误原因)、Top-levelawait(顶层await)等等。通过故事形式以及详细的阐述和示例,带领大家一起探索这些特性的用处,作为刚入门的新手,它能......
  • 2022最新上传ipa到appstore的步骤说明
    我们平时在开发原生的iosapp的时候,有苹果电脑在手,上传ipa文件到苹果开发者中心比较简单,直接在xcode上就可以实现了。但是现在大多数人开发app不再是用原生框架开发了,也没有苹果电脑。很多朋友们选择了跨平台的H5技术来开发app,真正做到实现一种语法到处运行的场景。现在比较热的框......
  • 2022完整iOS APP发布App Store上架流程指南
    如果你是新手,将在这里清晰发布到AppStore整个上架流程,还有相应的流程解决方案。如果你上架过iOSAPP,这里会了解到有更快捷的上架过程。上架iOS最基本需要一个付费的开发者账号,还没有的话申请一个或者借用。通常也还需要一台Mac电脑,不过这里介绍到不用Mac在Windows系统中直接发......
  • 2022最新iOS最新打包发布流程
    关于如何发布iOS应用到AppStroe,苹果开发者中心已经给出了很详细的说明。和普通的iOS应用一样,使用ReactNative开发的iOS应用也需要使用普通的iOS应用的发布流程,总的来说,主要涉及以下几步:加入苹果开发者计划,申请成为开发者;生成和配置开发者证书;打包iOS应用;上传应用并发布到AppStor......
  • 2022最新手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)教程
    Android篇 1IMEI和MEID(1)IMEI(InternationalMobileEquipmentIdentity)是国际移动设备身份码的缩写,国际移动装备辨识码,只有Android手机才获取的到,是由15位数字组成的"电子串号",比如像这样359881030314356,它与每台移动电话机一一对应,而且该码是全世界唯一的。它是GSM设备返......
  • 2022Android设备唯一标识(AndroidID,OAID等 )
    一、ID体系:你只是一串代码想要了解OAID,我们首先需要明白ID体系:想要追踪一个用户就必须先找到用户,在这个过程中,标识符(ID)就像我们的另一张身份证,它们就代表了数字化之后的你和我。不同App可能通过某些唯一标识符对你进行强制跟踪,广告平台则会通过这个唯一标识符对你进行用户画......