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();
		    }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章