/*
* 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
* 有效的括号:
* 输入:n = 3
* 输出:["((()))","(()())","(())()","()(())","()()()"]
* 输入:n = 1
* 输出:["()"]
*
*
* 从模拟的过程:
* 首先串为空,既可以添加(、也可以添加)
* 什么时候迭代添加结束,即str的长度为2n,或者无效时;
* 什么时候无效? 即左括号的个数比右括号少,其他情况都可以继续迭代
* 继续迭代时,时候时候可以加(,什么时候可以加)
* (的个数和n相关,)的个数和左括号的个数相关,应该满足:r<=l<=n,=>l<n,r<l是迭代的基础
*
* 难点:抽象出左右括号的关系,和迭代的基础
* */
var generateParenthesis = function(n) {
var result = [],l=0,r=0,str='';
back_tracking(n,result,l,r,str);
return result;
};
var back_tracking=function(n,result,l,r,str){
if(l<r){
return;
}
if(str.length===2*n){
result.push(str);
return;
}
if(l<n){
back_tracking(n,result,l+1,r,str+'(');
}
if(l>=r){
back_tracking(n,result,l,r+1,str+')');
}
}
console.log(generateParenthesis(1))
22、生成括号
于 2022-05-23 22:48:31 首次发布