Generate Parentheses:生成括号对
2017-10-13 15:14
459 查看
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 boolean test(int[] record){
Stack<Integer> st = new Stack<Integer>();
for(int i:record){
if(i==1){
st.push(0);
}else if(st.isEmpty()||st.pop()!=0){
return false;
}
}
return st.isEmpty();
}
public void dfs(List<String> list,int count,int n,int index,int[] record){//1表示'(',0表示')'
if(test(record)&&count==n){
System.out.println(Arrays.toString(record));
StringBuilder b = new StringBuilder();
for(int i:record){
if(i==1){
b.append("(");
}else{
b.append(")");
}
}
list.add(b.toString());
}else if(count>n){
return;
}else{
for(int i = index;i<2*n;i++){
record[i]=1;
dfs(list,count+1,n,i+1,record);
record[i]=0;
}
}
}
public List<String> generateParenthesis(int n) {
int[] record = new int[2*n];
ArrayList<String> list = new ArrayList<String>();
dfs(list,0,n,0,record);
return list;
}
}思路二:许多博客提到这事卡特兰树的变形,如http://www.cnblogs.com/grandyang/p/4444160.html。
下面代码思路:在已写出的结果中,右括号的数量一定不能大于左括号,否则:如(()))这种情况,就会多出一个右括号,由于在条件括号的方式是在后面添加,所以后续无论怎么添加都是非法结果。如果所有的括号都能写出,则结果是合法的。
public List<String> generateParenthesis(int n) {
List&l
4000
t;String> list = new ArrayList<String>();
generateOneByOne("", list, n, n);
return list;
}
public void generateOneByOne(String sublist, List<String> list, int left, int right){
if(left > right){
return;
}
if(left > 0){
generateOneByOne( sublist + "(" , list, left-1, right);
}
if(right > 0){
generateOneByOne( sublist + ")" , list, left, right-1);
}
if(left == 0 && right == 0){
list.add(sublist);
return;
}
}
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
思路一:递归求解:举出所有可能的组合,在判断是否合法
class Solution {
public boolean test(int[] record){
Stack<Integer> st = new Stack<Integer>();
for(int i:record){
if(i==1){
st.push(0);
}else if(st.isEmpty()||st.pop()!=0){
return false;
}
}
return st.isEmpty();
}
public void dfs(List<String> list,int count,int n,int index,int[] record){//1表示'(',0表示')'
if(test(record)&&count==n){
System.out.println(Arrays.toString(record));
StringBuilder b = new StringBuilder();
for(int i:record){
if(i==1){
b.append("(");
}else{
b.append(")");
}
}
list.add(b.toString());
}else if(count>n){
return;
}else{
for(int i = index;i<2*n;i++){
record[i]=1;
dfs(list,count+1,n,i+1,record);
record[i]=0;
}
}
}
public List<String> generateParenthesis(int n) {
int[] record = new int[2*n];
ArrayList<String> list = new ArrayList<String>();
dfs(list,0,n,0,record);
return list;
}
}思路二:许多博客提到这事卡特兰树的变形,如http://www.cnblogs.com/grandyang/p/4444160.html。
下面代码思路:在已写出的结果中,右括号的数量一定不能大于左括号,否则:如(()))这种情况,就会多出一个右括号,由于在条件括号的方式是在后面添加,所以后续无论怎么添加都是非法结果。如果所有的括号都能写出,则结果是合法的。
public List<String> generateParenthesis(int n) {
List&l
4000
t;String> list = new ArrayList<String>();
generateOneByOne("", list, n, n);
return list;
}
public void generateOneByOne(String sublist, List<String> list, int left, int right){
if(left > right){
return;
}
if(left > 0){
generateOneByOne( sublist + "(" , list, left-1, right);
}
if(right > 0){
generateOneByOne( sublist + ")" , list, left, right-1);
}
if(left == 0 && right == 0){
list.add(sublist);
return;
}
}
相关文章推荐
- Generate parentheses,生成括号对,递归,深度优先搜索。
- [Lintcode]Generate Parentheses 生成括号
- LeetCode | Generate Parentheses(生成括号)
- LeetCode 22 Generate Parentheses(生成括号)
- 代码的优化过程: 生成括号 Generate Parentheses
- [LintCode] Generate Parentheses 生成括号
- Generate Parentheses--生成匹配括号(重)
- Generate Parentheses 生成有意义的括号对
- LeetCode 22 Generate Parentheses(生成括号)
- Generate Parentheses 生成括号-- LintCode题解
- LeetCode22 Generate Parentheses 括号生成
- Leet Code 22 Generate Parentheses - 生成括号 - Java
- 【LeetCode-面试算法经典-Java实现】【022-Generate Parentheses(生成括号)】
- [Leetcode] generate parentheses 生成括号
- [LeetCode] Generate Parentheses 生成括号
- LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)
- LeetCode--Generate Parentheses(括号组合排列)Python
- Leetcode #22 Generate Parentheses 创建括号 解题报告
- LeetCode-22 Generate Parentheses(合法括号情况)
- LeetCode OJ 之 Generate Parentheses (产生括号)