Description:
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为括号的对数,输出所有可能的组合;
解法:我们可以利用回溯法得到可能的括号排列,每次得到一个组合判断其合法性,对于合法的我们插入到列表中;
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new LinkedList<>();
getAllParenthesis(list, "(", n-1, n);
return list;
}
private void getAllParenthesis(List<String> list, String s, int left, int right){
if(left == 0 && right == 0){
if(isValid(s)){//判断得到的组合的合法性
list.add(s);
}
return;
}
if(left > 0) getAllParenthesis(list, s+"(", left-1, right);
if(right > 0) getAllParenthesis(list, s+")", left, right-1);
}
private boolean isValid(String s){
int index = 0;//记录左括号的个数
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '('){
index++;
}
else if(index > 0){
index--;
}
}
return index == 0 ? true : false;
}
}