zoukankan      html  css  js  c++  java
  • [LeetCode系列]括号生成问题

    给定n, 返回所有匹配的n对括号的可能形式. 如

    给定 n = 3, 一个解集是:

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

    本题解法的思路是

    使用栈seq保存经历的字符串状态;

    使用栈valid保存对应的字符串中有效的括号对个数;

    当seq不为空时(即回溯未结束):

      当前的字符串和其中有效的括号对个数分别出栈;

      1. 如果字符串长度等于待求解的长度, 则将其加答案中;

      2. 如果字符串长度-有效括号对数小于最大括号对个数, 说明可以增加一个 "("; [有效括号对数代表已经放置的")", 这个差值代表已经放置的"("个数]

      3. 如果字符串长度大于成对的括号数, 说明需要加一个 ")", 并且有效括号对需要增加1; [说明有未配对的"("]

     1 class Solution {
     2 public:
     3     vector<string> generateParenthesis(int n) {
     4         if (n == 0) return vector<string> (0);
     5         stack<string> seq;
     6         stack<int> valid;
     7         vector<string> ans;
     8         
     9         seq.push("(");
    10         valid.push(0);
    11         while (!seq.empty()) {
    12             string s = seq.top(); seq.pop();
    13             int v = valid.top(); valid.pop();
    14             if (s.length() == 2 * n) {
    15                 ans.push_back(s);
    16                 continue;
    17             }
    18             if (s.length() - v < n) {
    19                 seq.push(s + "(");
    20                 valid.push(v);
    21             }
    22             if (v * 2 < s.length()) {
    23                 seq.push(s + ")");
    24                 valid.push(v+1);
    25             }
    26         }
    27         return ans;
    28     }
    29     
    30 };
  • 相关阅读:
    Clipper库中文文档详解
    uboot makefile构建分析
    nvidia tk1使用记录--基本环境搭建
    学习
    es6 es7新语法
    react dva发送请求详解(转)
    antDesign表单getFieldDecorator
    react dav
    js实现截取a标签的href属性和内容
    react学习
  • 原文地址:https://www.cnblogs.com/lancelod/p/3912890.html
Copyright © 2011-2022 走看看