• 22. Generate Parentheses dfs填表


    22. Generate Parentheses
    Medium

    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:

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    思路:
      如果n=1,那么最终结果都是2个符号,如果n=3,最终结果都是6个符号,所以只需要开一个2*n+1的字符数组
    枚举左右括号即可,第2*n个字符用于保存''(字符串结束标记),这样的时间复杂度是2^n次方。由于这样枚举
    出来的结果中有许多不合法,所以可以进行剪枝处理。
        1)第一个位置一定填充左括号
        2)如果当前的右括号个数大于左括号一定是错误的
        3)如果左括号个数大于一半,则一定不合法
    #include<iostream>
    #include<bits/stdc++.h>
    using namespace std;
    
    void solve(vector<string>&ans,int n,int i,int left,int right,char ch[])
    {
        if(left>n)
            return;
        if(i == 2*n)
        {
            ans.push_back(ch);
            return;
        }
        ch[i]='(';
        solve(ans,n,i+1,left+1,right,ch);
        if(right<left)
        {
            ch[i]=')';
            solve(ans,n,i+1,left,right+1,ch);
        }
    }
    
    
    vector<string> generateParenthesis(int n)
    {
        vector<string>ans;
        if(n==0)
            return ans;
        char ch[2*n+1];
        ch[0]='(';
        ch[2*n]='';
        solve(ans,n,1,1,0,ch);
        return ans;
    }
    
    int main()
    {
        vector<string>ans;
        ans=generateParenthesis(1);
        for(int i=0;i<ans.size();i++){
            cout<<ans[i]<<endl;
        }
        return 0;
    }
    
    
    


  • 相关阅读:
    第二十四讲 ASP.NET中开发复合控件
    第二十六讲 使用ASP.NET实现网络通讯
    第二十五讲 ASP.NET中的XML
    【经验】android webview 后退键导致表单再次提交
    【笔记】java 泛型
    【笔记】Collection
    【算法】Tween算法
    【JavaSript】发现一个漏洞
    【研究】加载图片时,同一url,多次request
    【笔记】多态之Override
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10504913.html
Copyright © 2020-2023  润新知