题目:
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
题意:
给定n个括号对,让他们组成一个括号串,这个括号串是一个良好形式的(按我的理解就是一个 ( 一定会有一个 )相对)
需要列出所有排列组合
解法:
首先,我们需要知道怎么样的串是合法的, 可以假设 ‘(’ 为1, ‘)’ 为-1,从左往右按值相加括号串,一旦在中间总和小于0,那么就是不合法的 (例如 ( )) = 1 -1 -1 =-1 ) 而在最后,总和一定要为0才是合法的
代码:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res=new ArrayList<String>();
recur(res,"(",2*n);
return res;
}
public void recur( List<String> res,String temp,int length){ //递归求解
if(temp.length()==length){
if(valid(temp)){
res.add(temp);
}
return;
}
recur(res,temp.concat("("),length);
recur(res,temp.concat(")"),length);
}
public boolean valid(String s){ //判断字串是否合法
char []c=s.toCharArray();
int sum=0;
for(int i=0;i<s.length();i++){
if(sum<0) return false;
if(c[i]=='(') sum++;
else sum--;
}
if(sum==0) return true;
else return false;
}
}
800

被折叠的 条评论
为什么被折叠?



