zoukankan      html  css  js  c++  java
  • 22. Generate Parentheses

    https://leetcode.com/problems/generate-parentheses/

    题目大意:给出n对小括号,求出括号匹配的情况,用列表存储并返回,例如:n=3时,答案应为:

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    解题思路:想到递归的思想,判断匹配成功(递归返回)的条件为:左右括号数保持一致并且括号字符串的长度等于2*n。
    具体做法:需要的空间:字符串列表存储最后结果;string存储括号;n存储要求的括号对数;deep存储字符串长度;left存储已经存入的左括号个数;right存储已经存入的右括号个数。
    解题技巧:递归实现时一般给出的函数难以进行递归,需要一个帮助函数,我们重新定义一个函数来实现递归。
    注意:s.resize(s.size() - 1);该句话是为了实现回溯,考虑一下每次执行该句时上一句的递归一定已经实现了,所以需要去除最后一个括号
    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            vector<string> result;
            string s;
            if(n > 0)
            {
                generateParenthesisHelper(result, s, n, 0, 0, 0);
            }
            return result;
        }
        void generateParenthesisHelper(vector<string>& result, string &s, int n, int deep, int left, int right)
        {
            if(deep == 2*n)
            {
                result.push_back(s);
                return;
            }
            if(left < n)
            {
                s.push_back('(');
                generateParenthesisHelper(result, s, n, deep + 1, left + 1, right);
                s.resize(s.size() - 1);
            }
            if(right < left)
            {
                s.push_back(')');
                generateParenthesisHelper(result, s, n, deep + 1, left, right +1);
                s.resize(s.size() - 1);
    } } };
  • 相关阅读:
    数字索引分页
    经典语录 cloud
    日常交际技巧经验总结100句(大全) cloud
    成大事必备9种能力、9种手段、9种心态 cloud
    浅谈服务器虚拟化
    使用mysqlard监控mysql服务器性能
    CentOS服务器iptables配置
    如何编写好的应用程序
    电子杂志新出路
    泸州老窖集团有限责任公司电子化职能化和网络化的管理新模式
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5583201.html
Copyright © 2011-2022 走看看