前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]这个题目想了个比较简单的方法,采用递归调用,构建树的方式将字符串生成,但是发现不知道是不是Leetcode有点坑,我将返回值声明为Static的时候,每次submit不会重置内存空间,害的我做测试案例没什么问题,submit就出错,最后改成了局部变量。 Your runtime beats 11.57% of java submissions.
public class Solution {
class TreeNode{
StringBuffer val = new StringBuffer("");
int leftBracket;
int rightBracket;
TreeNode(String val){
this.val.append(val);
}
}
public List<String> generateParenthesis(int n) {
List<String> results = new ArrayList<String>();
if(n == 0) return new ArrayList();
if(n == 1){
List<String> temp = new ArrayList<String>();
temp.add("()");
return temp;
}
TreeNode head = new TreeNode("(");
head.leftBracket = 1;
head.rightBracket = 0;
generateTree(head,n,results);
System.out.println(n);
return results;
}
public void generateTree(TreeNode head, int n,List<String>results){
if(head.leftBracket < n){
TreeNode left = new TreeNode(head.val.toString() + "(");
left.leftBracket = head.leftBracket + 1;
left.rightBracket = head.rightBracket;
generateTree(left,n,results);
}
if(head.rightBracket < n && head.rightBracket < head.leftBracket){
TreeNode right = new TreeNode(head.val.toString() + ")");
right.leftBracket = head.leftBracket;
right.rightBracket = head.rightBracket + 1;
generateTree(right, n,results);
}
if(head.leftBracket == n && head.rightBracket ==n){
results.add(head.val.toString());
}
}
}