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对括号,写一个函数生成良好的括号内的所有组合。
例如,给定n = 3时,一解集是:
“((()))”,“(()())”,“(())()”,“()(())”,“()()()”
Code:
package From21;
import java.util.ArrayList;
import java.util.List;
/**
* @author MohnSnow
* @time 2015年6月5日 下午5:24:26
*
*/
public class LeetCode22 {
/**
* @param argsmengdx
* -fnst
*/
//又是一道简单的题目,依旧是backtracking,在这个地方总是出错,需要突击一下了。。。
//小括号串是一个递归结构,跟单链表、二叉树等递归结构一样,首先想到用递归。
//一步步构造字符串。当左括号出现次数$<n$时,就可以放置新的左括号。
//当右括号出现次数小于左括号出现次数时,就可以放置新的右括号。
public static List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<String>();
String str = "";
backTracking(list, str, 0, 0, n);
return list;
}
public static void backTracking(List<String> list, String str, int left, int right, int n) {
if (left < right || right + left > n * 2)//left统计左括号数目,right统计右括号的位置
return;
if (left == n && right == n) {
list.add(str);
return;
}
backTracking(list, str + "(", left + 1, right, n);
backTracking(list, str + ")", left, right + 1, n);
}
public static void main(String[] args) {
int a = 2;
System.out.println(generateParenthesis(a));
}
}