22.给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
示例:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
【思路】
这个题使用递归法,但是题目要求是有效的括号。
【实现代码】
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res=new ArrayList<String>();
int left=n,right=n;
String item="";
generate(item,left,right,res);
return res;
}
private static void generate(String item,int left,int right,List<String> res){
//当n个左右括号都使用完了之后,则跳出结果
if(left==0 && right==0){
res.add(item);
return;
}
//还剩下左括号个数不为0
if(left>0){
generate(item+"(",left-1,right,res);
}
//还剩下右括号大于剩下左括号个数
if(left<right){
generate(item+")",left,right-1,res);
}
}
}