LeetCode:Generate Parentheses
刚看到题目的时候,有点不知所措。网上很多递归的方法,看完以后是心存疑虑的。
我的想法是,n对Parentheses,假设n-1的已经得到,如何在n-1的结果中添加一对有效括号呢。
其实可以把n-1拆成k和n-1-k,这样每次在k最外面添加一队这样的到的n对的有效序列。
k值是从0取到n-1.
其实左边就是一对,2对…到n-1对.
再把左边和右边添加在一起就是一个有效对。
特殊值是k==0和k==n-1。
public class Solution {
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> result = new ArrayList<String>();
if(n==0)return result;
else if(n==1){
result.add("()");
return result;
}
for(int k=0;k<n;k++)
{
if(k==0)
{
ArrayList<String> right = generateParenthesis(n-1-k);
int i = 0;
while(i<right.size())
{
String str = "()" + right.get(i);
result.add(str);
i++;
}
}
else if(k==n-1)
{
ArrayList<String> left = generateParenthesis(k);
int i = 0;
while(i<left.size())
{
String str = "(" + left.get(i) + ")";
result.add(str);
i++;
}
}
else
{
ArrayList<String> left = generateParenthesis(k);
ArrayList<String> right = generateParenthesis(n-1-k);
for(int i=0;i<left.size();i++)
{
for(int j=0;j<right.size();j++)
{
String str = "(" + left.get(i) + ")" + right.get(j);
result.add(str);
}
}
}
}
return result;
}
}