zoukankan      html  css  js  c++  java
  • Leetcode OJ: Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    For example, given n = 3, a solution set is:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    找出配对括号的所有组合,组合数就是卡特朗数,只是这里还要求组合,递归实现,关键是要搞清楚问题其实是每次从剩余的括号中取一个左括号或者是右括号,并保证,任何时刻,剩余的左括号要小于或等于右括号。当左右括号都无剩余时,则输出一个结果。

    代码如下:

     1 class Solution {
     2 public:
     3     void generate(int left, int right, string s, vector<string>& ret) {
     4         // 左侧剩余括号比右侧剩余要多
     5         if (right < left)
     6             return;
     7         
     8         // 左侧与右侧无剩余
     9         if (!left && !right) {
    10             ret.push_back(s);
    11             return;
    12         }
    13         
    14         // 加一个左侧括号,左侧剩余括号少1个
    15         if (left > 0) {
    16             generate(left - 1, right, s + "(", ret);
    17         }
    18         // 加一个右侧括号,右侧剩余括号少1个
    19         if (right > 0) {
    20             generate(left, right - 1, s + ")", ret);
    21         }
    22     }
    23     vector<string> generateParenthesis(int n) {
    24         vector<string> ret;
    25         generate(n, n, string(), ret);
    26         return ret;
    27     }
    28 };
     
  • 相关阅读:
    Java反射机制
    前端学PHP之基础语法
    详细了解HTML标签内容模型
    HTML的音频和视频
    三个不常用的HTML元素:<details>、<summary>、<dialog>
    HTML内联元素
    HTML5结构元素
    sublime简要笔记
    ISO语言代码
    使用余弦定理制作磁盘形状h5音乐播放器
  • 原文地址:https://www.cnblogs.com/flowerkzj/p/3643305.html
Copyright © 2011-2022 走看看