1、题目
22. 括号生成 - 力扣(LeetCode) https://leetcode-cn.com/problems/generate-parentheses/
2、题解
本题主要是解决两个问题,第一步是得到n对括号的排列组合方式,这个必须将左右括号分开排列组合。不然就只有一种。这样的话只需要通过递归的方式将n个左右括号排列组合的可能全部形成String值,装到List中即可。第二步,是得到有效的括号,即先有一个左括号,才能有一个右括号。所以将递归方法中的判断条件从:
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>0){
getParenthesisResult(result,str+')',left,right-1);
}
改为:
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>left){
getParenthesisResult(result,str+')',left,right-1);
}
即可。
3、代码
//得到有效的括号的组合结果;
class Solution {
public List<String> generateParenthesis(int n) {
ArrayList<String> result = new ArrayList<>();
String str = new String();
getParenthesisResult(result,str,n,n);
return result;
}
private void getParenthesisResult(ArrayList<String> result, String str, int left, int right) {
if(left==0&&right==0){
result.add(str);
return;
}
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>left){
getParenthesisResult(result,str+')',left,right-1);
}
}
}