LeetCode.M22

题目:

题目大意:

​ 给定一个n,使用n对括号,生成所有合法的括号组合并返回。

数据范围:

如图所示

思路:

​ 使用递归。每层递归考虑是添加一个“(”,还是补一个“)”使得添加的“)”和前面的“(”组成一个括号对。

​ 我们使用p表示已经添加了p个“(”,使用q表示还需要q个“)”来和前面的“(”组成一个括号对。

  • 考虑递归结束情况:当p == n,q == 0时,表示已经添加了n个左括号,也没有需要补的右括号了,此时将生成的括号组合s,添加到答案之中。
  • 当p < n时,表示仍然可以添加“(”,将“(”添加到s中,这时应使p + 1,q + 1,表示现在添加了p + 1个左括号了,还需q + 1个右括号,进入下一个递归。
  • 当q > 0时,表示可以添加一个右括号,使得和前面的一个左括号组成一个括号对,将“)”添加到s中,使p不变,q - 1,表示还需要q - 1 个右括号。

p 和 q 保证了括号组合的合法性。

代码:

import java.util.ArrayList;
import java.util.List;class Solution {List<String> list = new ArrayList<>();int n;// p :使用了几个左括号,q:需要补几个右括号.public void getAns(String s, int p, int q){if (p == n && q == 0) {list.add(s);return;}if (p < n){getAns(s + "(", p + 1, q + 1);}if (q > 0){getAns(s + ")", p, q - 1);}}public List<String> generateParenthesis(int n) {String s = "";this.n = n;getAns(s, 0, 0);return list;}
}public class Main {public static void main(String[] args) {Solution solution = new Solution();System.out.println(solution.generateParenthesis(3).toString());}
}

时空复杂度分析等:

  • 时间复杂度 : …

  • 空间复杂度 : O(n),栈的深度。

题目链接:

22. 括号生成 - 力扣(LeetCode)

LeetCode.M22.括号生成相关推荐

  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. 括号生成(Generate Parentheses)

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

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

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

  9. leetcode 22.括号生成

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

最新文章

  1. win10 没有选项 始终使用此应用打开此文件
  2. mpvue 小程序开发爬坑汇总
  3. [云炬python3玩转机器学习笔记] 2-7开发环境搭建笔记
  4. Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。
  5. 为了使界面组件更圆滑,Swing,且跨系统
  6. android 全局 窗口,miui12全局自由窗口app
  7. Android Retrofit框架请求复杂json数据
  8. 高职计算机热门专业有哪些,2014年高职高专十大热门专业
  9. gg修改器修改数值没有用怎么办_风灵月影是谁?风灵月影修改器大全
  10. StackGAN详解与实现(使用tensorflow2.x实现)——利用文本合成逼真的图像
  11. java合并pdf 追加页数_使用IText API将页码添加到具有不同页面大小的合并PDF
  12. Docker部署MySQL监控工具Lepus
  13. 常用计算机函数公式,最常用的Excel函数公式大全
  14. user_agent浏览器头部
  15. c++:过滤多余的空格
  16. 去哪儿网数据同步平台技术演进与实践
  17. 一加和小米哪个好 一加用技术领先树立起品牌典范
  18. uniapp实现登录功能步骤
  19. lineNumber: 1; columnNumber: 15; XML 声明中 version 后面跟随的值必须是用引号括起来的字符串。
  20. 战网游戏服务器连接中断,魔兽世界7.0军团再临游戏常见问题及解决方法

热门文章

  1. 插值法补齐缺失数据_缺失数据处理-插值法
  2. 微信10亿日活场景下,微服务架构实践!15页PPT全解
  3. 《精益创业实战》读书笔记
  4. 案例研究:设计与方法_案例研究:未来主义与新时代数字艺术作品
  5. 喝普洱熟茶时的八大禁忌您知道吗?
  6. android系统日期对话框只显示年月,android 只显示年月的日历
  7. Python爬虫初级(十三)—— 水木社区论坛爬取实战
  8. 联想笔记本的SCROLL LOCK键
  9. java cloneable 接口_Java8之Cloneable接口
  10. 网游UI解决方案的选择(CEGUI/MYGUI/Hikari/Scaleform/...)