正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
【思路】:
每个位置只有两种选择,放左括号或右括号。枚举即可。
最后筛选掉不合格的括号组合。
【代码】:
/**
* @param {number} n
* @return {string[]}
*/
var judge = function(str){
var arr = str.split("");
var stack = [];
for(let i = 0;i < arr.length;i++){
if(arr[i] == ')' && stack.length == 0) return false;
if(arr[i] == ')'){
stack.pop();
}else{
stack.push('(')
}
}
return stack.length == 0;
}
var dfs = function(target, k, path, res){
if(k >= target){
let str = [...path].join("");
if(judge(str))
res.push(str);
return ;
}
//每个位置就两种情况,左括号或右括号
for(let i = 0;i < 2;i++){
if(i == 0){
path.push("(");
}else{
path.push(")");
}
dfs(target, k + 1, path, res);
path.pop()
}
}
var generateParenthesis = function(n) {
var res = [];
dfs(n*2, 0, [], res);
return res;
};