zoukankan      html  css  js  c++  java
  • 算法39 leetcode22. 括号生成

    开始的想法

    生成n个独立的(),然后把最后一个往前面扔(重复这个过程)
    但是不好实现

    答案解法思路是类似生成然后去除不符合的项

    用动规好理解一些

    n+1可以理解为比n项多了一个括号,所以把n项放在括号里面p项和外面q项排列;p和q就转化成了子问题。但是要注意p和q的顺序是固定的,可以是p(q)、(p)q,但是为了保持不对称来避免重复项不能是pq()、()pq

    
    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            vector<vector<string>> brc;
            brc.push_back({""});
            brc.push_back({"()"});
            for(int i=2;i<=n;i++){
                vector<string> t;
                //利用n-1组合拼出n
    
                for(int a=0;a<i;a++){//a+b=n-1(p+q=n-1)
                    int b=i-1-a;
                    vector<string> p(brc[a]);
                    vector<string> q(brc[b]);
                    for( auto ps:p){
                        for( auto qs:q){
                            string ss="(";
                            ss=ss+ps+")"+qs;//(p)+q
                            t.emplace_back(ss);
                        }   
                    }
                }
                brc.push_back(t);
            }
            return brc[n];    
        }
        
    };
    
  • 相关阅读:
    4.22课堂
    4.21课堂
    4.20作业
    4.20课堂
    4.17课堂
    4.16课堂
    4.15作业
    4.15反射与内置方法
    4.10绑定与非绑定
    70、django中间件
  • 原文地址:https://www.cnblogs.com/impw/p/15733255.html
Copyright © 2011-2022 走看看