LeetCode题解——Generate Parentheses

来源:互联网 发布:沈阳网络电玩城 编辑:程序博客网 时间:2024/05/29 07:37

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:

"((()))", "(()())", "(())()", "()(())", "()()()"

做了一些题目之后,发现使用递归的地方和使用回溯的地方也可以使用动态规划来求解,而且动态规划求解更加易于理解和实现,算法的效率更高。

DP[n]=”(“+DP[k]+”)“+DP[n-k-1]; //for k=0:n-1

DP[0]=""

<pre name="code" class="cpp">//递归方法class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> ans;        if(n==0){            string s=""; ans.push_back(s);            return ans;        }        vector<string> s1;        vector<string> s2;        for(int i=0; i<=n-1; i++)        {            s1=generateParenthesis(i);            s2=generateParenthesis(n-i-1);            for(auto k1:s1)                for(auto k2:s2)                {                 ans.push_back("("+k1+")"+k2);                }        }        return ans;    }};
12ms
//DP动态规划求解class Solution {public:    vector<string> generateParenthesis(int n) {        vector<vector<string>> DP(n+1,vector<string>());        DP[0].push_back("");                for(int i=1; i<=n; i++)        {            for(int k=0; k<i; k++)            {                for(auto k1:DP[k])                    for(auto k2:DP[i-k-1])                    {                        DP[i].push_back("("+k1+")"+k2);                    }            }        }        return DP[n];    }};//4ms

0 0