LeetCode 22. Generate Parentheses(生成合法圓括號序列)
阿新 • • 發佈:2019-01-27
題目描述:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
例子(n=3):
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
分析:
題意:給定數字n,需要返回n對圓括號組成的所有合法序列的集合。
思路:由於需要返回所有結果,因此我們採用DFS搜尋。我們用left和right表示已經使用的左括號、右括號的數量,判斷條件如下:①如果left小於right,不符合、停止搜尋;②如果left大於right,此時可以加入左括號或者右括號、繼續搜尋;③
程式碼:
#include <bits/stdc++.h> using namespace std; class Solution { private: vector<string> ans; void DFS(int n, int left, int right, string res){ // debug // cout << "left: " << left << ", right: " << right << endl; // Exceptional Case: if(left == n && right == n){ ans.push_back(res); return; } if(left > n || right > n){ return; } if(left < right){ return; } DFS(n, left + 1, right, res + "("); if(left > right){ DFS(n, left, right + 1, res + ")"); } } public: vector<string> generateParenthesis(int n) { // Exceptional Case: if(n <= 0){ return vector<string>(); } ans.clear(); DFS(n, 0, 0, ""); return ans; } };