zoukankan      html  css  js  c++  java
  • Generate Parentheses -- leetcode

    题目描述:
    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    题目大意:
    给定整数 n,生成 n 个“()”排列。有Ann种。
    For example, given n = 3, a solution set is:
    [
    “((()))”,
    “(()())”,
    “(())()”,
    “()(())”,
    “()()()”
    ]

    思想:
    规则:左括号的个数 大于等于 右括号的个数
    假设我们已经打印了 m 个括号,此时 左括号剩余 left 个右括号 剩余 right 个
    是否可以继续打印左括号,取决于剩余的左括号个数left是否大于0,如果大于0,则可以继续打印左括号。
    是否可以打印右括号,在剩余的右括号大于0的前提下,还要满足剩余左括号的个数left 小于 剩余右括号的个数right(即已经打印的左括号个数 大于 已经打印的右括号个数),如若,剩余左括号的个数 left 大于 等于 剩余右括号的个数 right, 即已经打印的左括号个数 小于等于 右括号的个数(即:“相等情况:(())”“小于情况(不成立):())”),此时,再打印右括号,导致括号不匹配。

    代码:

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    void createParenthesis(vector<string>&, string, int, int);
    vector<string> generateParenthesis(int);
    int main()
    {
        int n;
        cin >> n;
        vector<string> ans = generateParenthesis(n);
        for (int i = 0; i < ans.size(); ++i) {
            cout << ans[i] << endl;
        }
        return 0;
    }
    /*
        left : 左括号剩余个数
        right : 右括号剩余个数
    */
    void createParenthesis(vector<string>& ans, string s, int left, int right) {
        //左右括号剩余为0,保存此序列
        if (left == 0 && right == 0)
            ans.push_back(s);
    
        //剩余左括号个数大于0,可以继续打印左括号
        if (left > 0)
            createParenthesis(ans, s + '(', left - 1, right);
    
        //剩余右括号个数大于0,且剩余左括号的个数小于右括号
        //即已经打印的左括号个数大于已经打印的右括号的个数,可以继续打印左括号
        if (right > 0 && left < right)
            createParenthesis(ans, s + ')', left, right - 1);
    }
    
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        if (n <= 0) return ans;
        string s = "";
        createParenthesis(ans, s, n, n);
        return ans;
    }

    结果:
    结果

  • 相关阅读:
    自动驾驶技术其实是一个美丽的谎言
    自动驾驶技术其实是一个美丽的谎言
    Shoutem旨在成为React Native移动应用领域的WordPress
    Mongodb安装
    spring mvc记录各个controller访问开始结束时间,以及耗时时间 线程安全
    python 升级
    SpringMVC的拦截器Interceptor
    使用org.apache.tools.zip实现zip压缩和解压
    使用 ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体
    Python爬虫入门教程 4-100 美空网未登录图片爬取
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779756.html
Copyright © 2011-2022 走看看