zoukankan      html  css  js  c++  java
  • [CareerCup] 9.6 Generate Parentheses 生成括号

    9.6 Implement an algorithm to print all valid (e.g., properly opened and closed) combinations of n-pairs of parentheses.
    EXAMPLE
    Input: 3
    Output: ((())), (()()), (())(), ()(()), ()()()

    LeetCode上的原题,请参见我之前的博客Generate Parentheses 生成括号

    解法一:

    class Solution {
    public:
        vector<string> generateParens(int n) {
            set<string> t;
            if (n == 0) t.insert("");
            else {
                vector<string> pre = generateParens(n - 1);
                for (auto a : pre) {
                    for (int i = 0; i < a.size(); ++i) {
                        if (a[i] == '(') {
                            a.insert(a.begin() + i + 1, '(');
                            a.insert(a.begin() + i + 2, ')');
                            t.insert(a);
                            a.erase(a.begin() + i + 1, a.begin() + i + 3);
                        }
                    }
                    t.insert("()" + a);
                }
            }
            return vector<string>(t.begin(), t.end());
        }
    };

    解法二:

    class Solution {
    public:
        vector<string> generateParens(int n) {
            vector<string> res;
            generateParensDFS(n, n, "", res);
            return res;
        }
        void generateParensDFS(int left, int right, string out, vector<string> &res) {
            if (left > right) return;
            if (left == 0 && right == 0) res.push_back(out);
            else {
                if (left > 0) generateParensDFS(left - 1, right, out + '(', res);
                if (right > 0) generateParensDFS(left, right - 1, out + ')', res);
            }
        }
    };
  • 相关阅读:
    WSL2
    坐标系变换
    Python websocket
    PAJ7620 IIC 通信
    Python中assert的使用
    Python中循环的使用
    Linux 生成指定大小文件
    SVN不显示log 显示1970年问题
    阿里云 CS实例 开机自运行脚本文件
    生成UDS安全算法DLL文件
  • 原文地址:https://www.cnblogs.com/grandyang/p/4828614.html
Copyright © 2011-2022 走看看