用于生成给定数量的尖括号 "<" 和 ">" 之间的所有组合。函数名为 combine
,它接受一个参数 n
,表示尖括号的数量。
<script> let n = 3 //定义一个变量n赋值为3 function combine(n) { //定义一个函数接受参数为n var result = []; //定义一个数组,用来存储结果返回的数据 function comm(str, left, right) { //定义一个内部函数,里面的参数分别用来定义 str是这个组合的字符串,let是左括号剩余的数量,right是右括号剩余的数量 // 当左右尖括号都用完时,将组合添加到结果数组中 if (left === 0 && right === 0) { //如果左括号和右括号都用完时也就是说都等于0啦,则将他push到一个新数组里 result.push(str); //将存储返回来的结果push到str里 因为刚才在上面已经定义过啦,str是这个组合的字符串,也就是说说把当前的结果push到结果数组里 return; //结束当前递归调用,终止这个循环 } // 如果左尖括号还有剩余,则可以添加一个左尖括号 if (left > 0) { //如果这个左边括号的数量大于0,也就是说还没结束,那么就让添加一个左括号 comm(str + "<", left - 1, right); //那么就让这个左括号添加到这个组合中,让左括号的数量-1,右括号不变 } // 如果右尖括号的数量大于左尖括号的数量,则可以添加一个右尖括号 if (right > left) { //这个和上方的同理,当左括号的数量大于右括号时 comm(str + ">", left, right - 1); //那么就在这个组合里将右括号+1,做扩哈不变,在右括号数量里,将右括号-1 } } // 调用递归函数生成组合 comm("", n, n); //初始化函数,将里面传入组合初始值,然后就生成组合 return result; //终止这个循环,并且返回生成的组合的结果 } console.log(combine(n)); // 输出:["<><><>", "<><<>>", "<<>><>", "<<<>>>", "<<><>>"] </script>