zoukankan      html  css  js  c++  java
  • LeetCode 20 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:

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

    还是类似的括号匹配问题,这次是要生成所有可能的匹配组合,思路如下:

    首先用迭代法穷举可能出现的所有情况,然后利用已有的isValid()判断是否匹配,进而决定是否储存到返回vector容器中。

    class Solution {
    public:
        vector<string> generateParenthesis(int n) 
        {
            mSize = n * 2;
            init();
            string s;
            genpa(-1, s);
            return ret;
        }
        bool isValid(string s) 
    {
        stack<char> stk;
        int nSize = s.size();
    
        for(int i = 0; i!= nSize; ++i)
        {
            if(s[i] == '{' || s[i] == '(' || s[i]== '[')
            {
                stk.push(s[i]);
            }
            else
            {
                if(stk.empty())
                {
                    return false;
                }
                char cElem = stk.top();
                if(cElem - s[i] ==-1 || cElem - s[i] == -2)
                {
                    stk.pop();
                    continue;
                }
                else
                {
                    return false;
                }
            }
        }
        if(!stk.empty())
        {
            return false;
        }
        return true;
    }
        void genpa(int j, string s)
        {
            if(j == mSize -1)
            {
                if(isValid(s))
                {
                    ret.push_back(s);
                }
                return;
            }
            for(int i = 0; i!= 2; ++i)
            {
                genpa(j+1, s+album[i]);
            }
        }
        void init(void)
        {
            album[0] = '(';
            album[1] = ')';
        }
    private:
        int mSize;
        vector<string> ret;
        char album[2];
    };

    思路类似,多举一反三。

  • 相关阅读:
    Git----远程仓库01
    Git--时光穿梭机之删除文件06
    Git----时光穿梭机之撤销修改05
    Git----时光穿梭机之管理修改04
    Git----时光穿梭机之工作区和暂存区03
    Git---时光穿梭机之版本回退02
    Git----时光穿梭机01
    Git---创建版本库
    python自动化之鼠标移动
    python自动化之excel
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/4492373.html
Copyright © 2011-2022 走看看