当前位置: 首页 > article >正文

leetcode 括号(面试题)

题目

括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。

说明:解集不能包含重复的子集。

例如,给出 n = 3,生成结果为:

[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bracket-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  • 如果left 以及 right都为空,那么是递归到最后,就将填充完的track返回。
  • 如果左边还有填充,也就是左括号数量还有空余量,那么在毁掉中加入“(”,同时左边的测试-1,加入左边的括号了,那么右边与之匹配的括号也要+1.再递归。
  • 如果右边还能填充,那么填充完右边之后,右边的剩余可以匹配的数量-1,同时增加")"
  • 在函数调用的时候,先填入n表示左边匹配的数量,再填右边的数量0,填充的字符串为“””
  • 每次左边递归的同一级代码必须有右递归代码,这样左边和右边就每次都是匹配的。

代码

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        backtrack(res,n,0,"");
        return res;
    }

    void backtrack(vector<string> &res,int left,int right,string track)
    {
        if(!left && !right)
        {
            res.push_back(track);
        }
        if(left>0)
        {
            backtrack(res,left-1,right+1,track+"(");
        }
        if(right>0)
        {
            backtrack(res,left,right-1,track+")");
        }
    }

};

http://www.kler.cn/a/4900.html

相关文章:

  • Prometheus监控实战系列九:主机监控
  • 【组织架构】中国铁路上海局集团有限公司
  • 光耦合器的工作,类型和应用
  • 【案例教程】R语言贝叶斯方法在生态环境领域中的高阶技术
  • ai对话一例
  • 华为OD机试题【异常的打卡记录】用 Java 解 | 含解题说明
  • C++17好用的类
  • NVIDIA英伟达又发布了哪些黑科技?
  • PHP如何优雅从表格导入十万条数据甚至百万条数据呢?
  • 数位排序(2023寒假每日一题 9)
  • 【C#】List.ForEach方法
  • 做抖音起号的五件套是什么?抖音五件套怎么搭建?
  • VisualDCT用户手册
  • Synchronized锁升级之无锁和偏向锁
  • 【计算机视觉】COCO Caption数据集简单介绍
  • 032:cesium修改默认地图源,动态指定地图
  • Redis7笔记(正在更新中)
  • 【华为OD机试 2023最新 】 优选核酸检测点(C++)
  • 优思学院|平衡计分卡是什么?
  • 网站流量飙升背后:外贸企业谷歌SEO优化实战经验分享