描述

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

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

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

解析

对于此题,在帖子《以Generate Parentheses为例,backtrack的题到底该怎么去思考?》中,从前文提到的选择、限制、结束条件的角度出发,进行了专门的解释:

该问题的选择:任何时刻都有两种选择:
A. 加左括号
B. 加右括号

该问题的限制:
A. 如果左括号已经用完,则不能再加左括号了;
B. 如果已经出现的右括号和左括号一样多,则不能再加右括号了(因为这样的话新加入的右括号一定无法匹配);

该问题的结束条件:
左右括号全部用完;

此外,还要考虑到该题的其他问题:
结束之后的正确性:左右括号同时用完,一定是正解(一方面左右括号个数相等,另一方面每个右括号都一定有配对的左括号)。
递归函数传入参数:
A. 左右括号的数目(因为限制条件和结束条件中有“用完”“一样多”的字样);
B. 当前字符串 tempStr,解集 list

代码

class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
int left = n;
int right = n;
generateParenthesisHelp("", list, left, right);
return list;
} public void generateParenthesisHelp(String tempStr, List<String> list, int left, int right) {
if (left == 0 && right == 0) {
list.add(tempStr);
return;
}
if (right > left) {
generateParenthesisHelp(tempStr + ")", list, left, right - 1);
}
if (left > 0) {
generateParenthesisHelp(tempStr + "(", list, left - 1, right);
}
}
}

[LeetCode] 22. 括号生成 ☆☆☆(回溯)的更多相关文章

  1. LeetCode 22. 括号生成(Generate Parentheses)

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

  2. Java实现 LeetCode 22 括号生成

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

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

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

  4. LeetCode 22. 括号生成 C++(回溯法)

      还是用回溯法暴力解题,遍历所有可能,不过还是在此基础上进行了一些的优化,来阻止那些不必要的遍历.好,上代码. class Solution { public: vector<string&g ...

  5. [LeetCode] 22. 括号生成

    题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...

  6. leetcode 22括号生成

    非常好的一道题.一开始的思想是这样的,先把n对括号按照某一顺序生成一个string,然后用全排列算法生成所有可能,然后利用stack写一段判断括号是否匹配的字符串,匹配的假如结果中.不过会超时.因为全 ...

  7. LeetCode 22. 括号生成(Generate Parentheses)

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

  8. leetcode 22. 括号生成 dfs

    先思考符合要求的串是什么样子的 任意时刻,(数量大于),且最后(==)==n即可 考虑下一个加入string的字符时(或者)即可 dfs class Solution { public: vector ...

  9. Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)

    Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...

随机推荐

  1. 重装GUI前备份GUI配置

    sap系统要重装, gui配置 想要保存,这个要怎么弄? SAP菜单  选项-> 本地数据 -> 历史记录 里的地址 C:\Users\Administrator\AppData\Roam ...

  2. laravel的workflow流程插件

    原文地址:https://github.com/brexis/laravel-workflow

  3. Egret入门学习日记 --- 问题汇总

    问题1: 图片无法拖入到 EXML 文件的问题 在日记 第六篇 有记载:https://www.cnblogs.com/dmc-nero/p/11188975.html 位于 3.6节 内容. 问题2 ...

  4. Django面试题(附带答案)

    总结的一些Django中会问的问题,希望对你们有用. 1. Django的生命周期 当用户在浏览器输入url时,浏览器会生成请求头和请求体发送给服务端,url经过Django中的wsgi时请求对象创建 ...

  5. 2019强网杯部分misc&web

    0x01 前言 前两天菜鸡+x和几个大哥算是正式参加了一次ctf的线上赛,也是第一次参加这种比赛(前一段时间巨佬也给了我们一个西班牙的比赛,不过不算是正式参赛,做题的时候,比赛已经结束了),没想到出师 ...

  6. iOS-AES算法总结

    AESCipher.h #import <Foundation/Foundation.h> @interface AESCipher : NSObject /** 加密算法 @param ...

  7. PCL学习(二)三维模型转点云 obj转pcd----PCL实现

    #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/io/obj_io.h> #incl ...

  8. Sql 第一行某列减第二行某列

    --1. 将结果插入临时表SELECT *INTO xxx FROM( SELECT TOP 1 a.FQTY,a.fseq FROM T_SAL_ORDERENTRY as a WHERE FQTY ...

  9. Word 查找替换高级玩法系列之 -- 给数字批量添加空格和下划线

    Word中的查找和替换是一个很强大的功能,很多人都在使用这项功能.查找和替换,顾名思义就是说,查找到符合条件的内容,然后将那些内容替换成我们所需要的内容.下面,我们就通过实例来了解一下查找和替换功能, ...

  10. [MA] 有关 Likelihood

    当提到 Linear Regression 或是 Logistic regression 等关键词时,都会涉及一个概念,叫做 Likelihood Function 以及 Maximum Likeli ...