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

22. 括号生成【 力扣(LeetCode) 】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


22. 括号生成

一、题目描述

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

二、测试用例

示例 1:

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

示例 2:

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

提示:

1 <= n <= 8

三、解题思路

  1. 基本思路:
      回溯 + 剪枝
  2. 具体思路:
    • 编写回溯函数 dfs
      • 如果括号都放完了,则记录到答案中;
      • 如果剩余左括号数多余又括号,说明括号序列不合法,则回溯;【剪枝】
      • 如果左括号还有剩,则该位置放置左括号,递归调用 dfs 函数,确定下一个位置;
      • 如果右括号还有剩,则该位置放置右括号,递归调用 dfs 函数,确定下一个位置;
    • 调用 dfs 函数
    • 返回结果。

四、参考代码

时间复杂度: O ( 2 n ) \Omicron(2^n) O(2n)
空间复杂度: O ( n ) \Omicron(n) O(n)

class Solution {
public:vector<string> ans;string str;void dfs(const int& left, const int& right) {if (left == 0 && right == 0) {ans.emplace_back(str);return;}if (left > right)return;if (left > 0) {str.push_back('(');dfs(left - 1, right);str.pop_back();}if (right > 0) {str.push_back(')');dfs(left, right - 1);str.pop_back();}}vector<string> generateParenthesis(int n) {dfs(n, n);return ans;}
};
http://www.xdnf.cn/news/876547.html

相关文章:

  • 蓝牙防丢器应用方案
  • hadoop集群单词统计(ssh与web)
  • AI助力Java开发:减少70%重复编码,实战效能提升解析
  • 如何在 git dev 中创建合并请求
  • 具备强大的数据处理和分析能力的智慧地产开源了
  • 【项目实践】SMBMS(Javaweb版)(二)登录功能
  • 《动手深度学习》8.2文本预处理—代码分析
  • Kafka消息队列笔记
  • 打包成windows exe
  • json 支持复杂结构预览、大模型服务部署体验优化|ModelWhale 版本更新
  • Ansible自动化运维全解析:从设计哲学到实战演进
  • 手写Promise中的实例方法catch
  • 如何做出更明智的选择:从吃馒头看经济学思维
  • 嵌入式学习Day32
  • 三维坐标转换
  • AXPM11584:颠覆传统,发现新可能
  • 灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试
  • Mask篇 (含引导层、不规则遮罩)
  • 深入解析Java17核心新特性(密封类、模式匹配增强、文本块)
  • Python 类型注释 - typing
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • Seata 分布式事务安装配置集成实战
  • Git忽略规则.gitignore不生效解决
  • 突破模型成本瓶颈:MoE如何让专业大模型更易用?​
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • PH热榜 | 2025-06-04
  • Facebook接入说明
  • JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?