题目描述

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

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

["((()))","(()())","(())()","()(())","()()()"
]

解题思路

利用回溯的思想递归的生成括号。具体来说记录当前剩余左括号数left,剩余右括号数right,当前的生成括号字符串s,进行如下操作:

  • 若left为0,说明左括号已全部打印完,所以将剩余的右括号全部打印出来并加入到结果集
  • 若right>left,即当前字符串中的左括号还有未匹配到的右括号,此时有两种选择:继续打印一个左括号或者匹配打印一个右括号,再对这两种选择分别递归判断
  • 若left和right相等,即当前字符串中的左括号全部有匹配到的右括号,此时只能再打印一个左括号,再递归判断

代码

 1 class Solution {
 2 public:
 3     vector<string> generateParenthesis(int n) {
 4         vector<string> res;
 5         generate(n, n, "", res);
 6         return res;
 7     }
 8     void generate(int left, int right, string s, vector<string> &res){
 9         if(left == 0){
10             while(right--)
11                 s += ")";
12             res.push_back(s);
13         }
14         else if(right > left){
15             generate(left-1, right, s+"(", res);
16             generate(left, right-1, s+")", res);
17         }
18         else
19             generate(left-1, right, s+"(", res);
20     }
21 };

转载于:https://www.cnblogs.com/wmx24/p/9093758.html

LeetCode 22. 括号生成(Generate Parentheses)相关推荐

  1. [DFS|剪枝] leetcode 22 括号生成

    [DFS|剪枝] leetcode 22 括号生成 1.题目 题目链接 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 示例: 输入:n = 3 输出:[& ...

  2. Leetcode 22. 括号生成(递归+去重)

    22. 括号生成 思路: 递归+map去重: 递归函数声明: vector<string> generateParenthesis(int n); 递归出口: 当n=1时,返回{" ...

  3. LeetCode 22. 括号生成(回溯/DP)

    文章目录 1. 题目 2. 解题 2.1 暴力回溯 2.2 DP 1. 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...

  4. leetcode - 22. 括号生成

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())& ...

  5. leetcode 22. 括号生成

    难度:中等 频次:62 题目: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合. 解题思路:DFS DFS注意 构造一棵树,只要遍历就行了 递归结束条件是 ...

  6. Leetcode 22.括号生成 (每日一题 20210623)

    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合.示例 1:输入:n = 3 输出:["((()))","(()())&quo ...

  7. LeetCode 22. 括号生成(回溯+剪枝)

    题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 思路 详见链接 代码 from typing import List class Solution ...

  8. leetcode 22.括号生成

    题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

  9. LeetCode 22 括号生成

    https://leetcode-cn.com/problems/generate-parentheses/ 解决方案 class Solution {List<String> ans = ...

最新文章

  1. PTA基础编程题目集-6-13 折半查找
  2. linux 查看开放的端口_如何在 Linux 中查看正在使用的端口
  3. java web 项目启动_Java web项目启动Tomcat报错解决方案
  4. C#解密出生日期【C#】
  5. Linux流量监控工具 - iftop
  6. oracle database link创建
  7. 快准狠才叫爽!六款智能电视语音识别大比拼
  8. Mysql 锁定 读情况
  9. 从泰勒展开到牛顿迭代
  10. svg 地图_用于Power BI的SVG省市地图(带数据标签,含下载)
  11. 错误: 实例 ruiy 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: #39;ascii#39; codec can#39;t decode byte 0xe6 in po...
  12. PHP基础: CLI模式开发不需要任何一种Web服务器
  13. 怎样把pdf格式转换成jpg
  14. 模拟计算 |“五重解读”带你玩转CO2RR描述符-科学指南针
  15. 2021年河南省高考数据统计:河南省参加考试人数占报名人数的83.7%,本土156所高校(1所211大学)
  16. 傅里叶级数展开及系数项求解
  17. python软件工程师面试题目及答案_Python面试题及答案汇总整理(2019版)
  18. 虚幻4 虚拟漫游场景 制作过程
  19. jxl可以操作excel2007吗?可以
  20. 枭龙智能眼镜 XLOONG X100 Glass拆解

热门文章

  1. html2canvas生成海报的各种问题
  2. Glob Patterns匹配模式使用
  3. epoll的两种模式
  4. 如何使antd中table表格不换行
  5. 用fiddler抓包小程序
  6. [react] useState和this.state的区别是什么?
  7. 前端学习(3153):react-hello-react之脚手架文件介绍
  8. 前端学习(3030):vue+element今日头条管理-顶部导航栏布局
  9. [vue] 怎么访问到子组件的实例或者子元素?
  10. [vue] 写出你知道的表单修饰符和事件修饰符