LeetCode 22.括号生成

LeetCode 22.括号生成

码农世界 2024-05-27 前端 73 次浏览 0个评论

原题链接:. - 力扣(LeetCode)

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 8

    思路:

    本题可以采用 回溯的方法解决。将剩余可放置的 左括号 '('  数量 left 和 右括号 ')' 数量 right 作为参数传入 backtrack 函数中。

    终止条件有三类:

    • 一是 right < left,剩余可放置的 左括号的数量 大于 剩余可放置的右括号数量,则最后的组合必然不合法的,比如,剩余可以放置的 左括号数量为 3 ))),右括号数量为 2 ((,那么显然不能组成合法的括号对。
    • 二是 left<0 || right<0,可放置数量小于0 是不合法的。
    • 三是 left ==0 && right ==0,这种情况则合法,将 合法的字符串添加进 结果集中。

      代码:

      class Solution {
          List res = new ArrayList<>();
          public List generateParenthesis(int n) {
              if(n==0)return res;
              backtrack(n,n);
              return res;
          }
          StringBuilder path = new StringBuilder();
          //左括号还能放置的个数为left,右括号还能放置的个数为right
          public void backtrack(int left,int right){
              //如果左括号还能放置的个数多于右括号,则不合法
              if(right 
      

转载请注明来自码农世界,本文标题:《LeetCode 22.括号生成》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,73人围观)参与讨论

还没有评论,来说两句吧...

Top