LeetCode *** 22. Generate Parentheses

来源:互联网 发布:sql to_char和to_date 编辑:程序博客网 时间:2024/05/01 03:04

题目:

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:

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


分析:

其实主要是说代码,我一直喜欢用非递归,认为非递归花费时间多一些,但从我最近刷的题来看,递归更节约时间。


代码:

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> res;        if(n<1)return res;                stack<string> record;        stack<int> recordpreint;        stack<int> recordint;                record.push("(");        recordpreint.push(1);        recordint.push(1);                while(!record.empty()){                        string tmp=record.top();            int tmpint=recordint.top();            int tmppreint=recordpreint.top();                        record.pop();            recordint.pop();            recordpreint.pop();                        if(tmp.length()==n*2)res.push_back(tmp);            else {                if(tmppreint<n){                    record.push(tmp+'(');                    recordint.push(tmpint+1);                    recordpreint.push(tmppreint+1);                }                if(tmpint>0){                record.push(tmp+')');                recordint.push(tmpint-1);                recordpreint.push(tmppreint);                }            }        }        return res;            }};


class Solution {public:    vector<string> res;    vector<string> generateParenthesis(int n) {        helper("",n,0);        return res;    }        void helper(string s,int left,int right){                if(left==0&&right==0)            res.push_back(s);        else{            if(left)helper(s+'(',left-1,right+1);            if(right)helper(s+')',left,right-1);        }            }    };

0 0
原创粉丝点击