zoukankan      html  css  js  c++  java
  • LeetCode Generate Parentheses (DFS)

    题意

    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对括号的所有组合。

    解法

    比较明显的深搜,主要保存两个变量,一个left用来记录已经安放的左括号的数量,相当于一个栈,还有一个avaliable用来记录剩下还有多少个左括号可以取。当left不为空时,对于每一次新括号的选取,可以新增一个左括号(如果avaliable还没空的话),或者是取一个右括号来和之前的一个左括号匹配。当left为空时,能做的就只有一直取右括号来和前面的左括号匹配。

    class Solution
    {
    public:
        vector<string> generateParenthesis(int n)
        {
    	    vector<string>	ans;
    	    string	temp;
    	    dfs(0,n,0,n,ans,temp);
    	    return	ans;
        }
    
        void	dfs(int left,int avaliable,int length,int n,vector<string> & ans,string temp)
        {
    	    if(length == n * 2)
    	    {
    		    ans.push_back(temp);
    		    return	;
    	    }
    
    	    if(left)
    	    {
    		    if(avaliable)
    		    {
    			    temp += '(';
    			    dfs(left + 1,avaliable - 1,length + 1,n,ans,temp);
    			    temp.pop_back();
    		    }
    
    		    temp += ')';
    		    dfs(left - 1,avaliable,length + 1,n,ans,temp);
    		    temp.pop_back();
    	    }
    	    else
    		    if(avaliable)
    		    {
    			    temp += '(';
    			    dfs(left + 1,avaliable - 1,length + 1,n,ans,temp);
    			    temp.pop_back();
    		    }
        }
    };
    
  • 相关阅读:
    Mishka and Interesting sum
    Tree Restoring
    LIB 配置文件读写器
    WCF 采用net.tcp协议实践
    MVC ViewEngineResult实际上是一种设计
    MVC 依赖注入扩展
    功能权限设计
    代理上网荟萃
    MD5算法 简介
    MVC _ViewStart文件的作用
  • 原文地址:https://www.cnblogs.com/xz816111/p/5859901.html
Copyright © 2011-2022 走看看