[LeetCode22]Generate Parentheses

来源:互联网 发布:网络摄像头相关知识 编辑:程序博客网 时间:2024/06/09 08:00

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:

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

Analysis:

recursion, when left parentheses number smaller than n, add it. when right parentheses smaller than left, add it

Java

public class GenerateParentheses {ArrayList<String> res;StringBuffer pare;public List<String> generateParenthesis(int n) {res = new ArrayList<>();pare = new StringBuffer();parenethesis(n, 0, 0, 0);return res;    }public void parenethesis(int n, int leftNum, int rightNum, int level){if(2*n == level){res.add(pare.toString());return;}if(leftNum<n){pare.append('(');parenethesis(n, leftNum+1, rightNum, level+1);pare.deleteCharAt(level);}if(rightNum<leftNum){pare.append(')');parenethesis(n, leftNum, rightNum+1, level+1);pare.deleteCharAt(level);}}}
c++

void CombinationPar(vector<string>& result, string& sample, int deep,                              int n, int leftNum, int rightNum)    {         if(deep == 2*n)         {             result.push_back(sample);             return;         }         if(leftNum<n)         {            sample.push_back('(');              CombinationPar(result, sample, deep+1, n, leftNum+1, rightNum);              sample.resize(sample.size()-1);         }         if(rightNum<leftNum)         {               sample.push_back(')');              CombinationPar(result, sample, deep+1, n, leftNum, rightNum+1);              sample.resize(sample.size()-1);         }    }    vector<string> generateParenthesis(int n) {         // Start typing your C/C++ solution below         // DO NOT write int main() function         vector<string> result;         string sample;         if(n!= 0)              CombinationPar(result, sample, 0, n, 0, 0);         return result;    }






0 0
原创粉丝点击