码迷,mamicode.com
首页 > 其他好文 > 详细

LC28 Generate Parentheses

时间:2016-04-10 20:58:31      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

想着用动态规划的方法,有点类似于n*n的网格,从(0,0)开始走到(n-1,n-1)有几种方法。当然必须满足纵坐标大于等于横坐标,还有必须记录到达每一个点所走的方法(这里指的是有多少不同的字符串)。

技术分享
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> result;
        if(n<=0)
            return result;
        vector<vector<string> > prev(n+1,vector<string>());
        
        string s1="(";
        string s2=")";
        for(int i=1;i<=n;i++)
        {
            vector<vector<string> > rear(n+1,vector<string>());
            if(prev[0].size()!=0)
                rear[0].push_back(prev[0][0]+s1);
            else if(prev[0].size()==0)
                rear[0].push_back(s1);
            for(int j=1;j<i;j++)
            {
                for(int k=0;k<prev[j].size();k++)
                    rear[j].push_back(prev[j][k]+s1);
                for(int k=0;k<rear[j-1].size();k++)
                    rear[j].push_back(rear[j-1][k]+s2);
            }
            for(int k=0;k<rear[i-1].size();k++)
                rear[i].push_back(rear[i-1][k]+s2);
            swap(prev,rear);
        }
        return prev[n];
    }
};
View Code

还有种用递归的简洁方法:

技术分享
 1 class Solution {
 2 public:
 3     vector<string> generateParenthesis(int n) {
 4         vector<string> res;
 5         addingpar(res, "", n, 0);
 6         return res;
 7     }
 8     void addingpar(vector<string> &v, string str, int n, int m){
 9         if(n==0 && m==0) {
10             v.push_back(str);
11             return;
12         }
13         if(m > 0){ addingpar(v, str+")", n, m-1); }
14         if(n > 0){ addingpar(v, str+"(", n-1, m+1); }
15     }
16 };
View Code

 

LC28 Generate Parentheses

标签:

原文地址:http://www.cnblogs.com/vaecn/p/5375081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!