LeetCode:22 括号生成
题目描述
给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出n = 3,生成结果为:
[ ((())), (()()), (())(), ()(()), ()()() ]
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
题解
采用回溯法,组成括号需要满足:左右两边括号数应该相等;先放左括号,当左括号的数量小于n时,肯定可以放一个;当右括号个数少于左括号时,肯定可以放一个右括号。
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<>();
sourceBack(res,n,"",0,0);
return res;
}
public List<String> sourceBack(List<String> ans,int n,String tmp,int left,int right){
if(tmp.length() == n*2){
ans.add(tmp);
return ans;
}
if(left < n)
sourceBack(ans,n,tmp + '(',left+1,right);
if(right < left)
sourceBack(ans,n,tmp + ')',left,right+1);
return ans;
}
}