LeetCode #22 括号生成

class Solution {
public:
    map<string,int> hash={{"(",1},{")",-1}};
    bool canaddRight(string str){
        int i=0;
        string s;
        int j;
        for(j=0;j<str.size();j++){
            s=str.substr(j,1);
            i+=hash[s];
        }
        return i;
    }
    int count(string str){
        int i=0;
        string s;
        int j;
        for(j=0;j<str.size();j++){
            s=str.substr(j,1);
            i+=hash[s]==1?1:0;
        }
        return i;
    }
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        queue<string> p;
        if(n==0){
            return ans;
        }
        p.push("(");
        string s,s_;
        while(!p.empty()){
            s=p.front();
            if(s.size()==2*n-1){
                ans.push_back(s+")");
            }
            else{
                if(canaddRight(s)){
                    p.push(s+")");
                }
                if(count(s)<n){
                    p.push(s+"(");
                }
            }
            p.pop();
        }
        return ans;
    }
};

这道题基本上就是两种思路,遍历或者动态规划(状态转移),遍历是用时间换空间,遍历是用空间换时间(存储所有n小的状态来减少遍历)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出...
    LeeYunFeng阅读 5,136评论 0 50
  • 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n ...
    半亩房顶阅读 2,801评论 0 1
  • 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n ...
    禾木清清阅读 1,280评论 0 0
  • 1.题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出...
    NWPU_HaiboWu阅读 1,111评论 0 1
  • git本质上是一个内容寻址的文件系统,并在此基础上提供了一个版本控制系统的界面。 一个已经初始化后的git...
    伊凡的一天阅读 3,853评论 0 2