每日一道算法Day10

80 阅读1分钟

题目描述:

截屏2021-08-05 下午9.49.57.png

大致思路: 递归

首先,找出 有效的 的括号的组合规律:

  1. 长度为 2*n, 其中左括号与右括号数量等于n。
  2. 在拼接的过程中, 不能出现 剩余的左括号数量大于剩余的右括号数量的情况。

最后找出递归结束的条件为 剩余的左括号数量与剩余的右括号数量皆为0的时候。

export function generateParenthesis(n: number): string[] {
  const res: string[] = [];
  /**
   *
   * @param lCount 剩余左括号数量
   * @param rCount 剩余右括号数量
   * @param str  拼接的字符串
   */
  const generateStr = (lCount: number, rCount: number, str: string) => {
    //递归什么时候结束:  当 lCount === 0 &&  rCount === 0
    if (lCount === 0 && rCount === 0) {
      res.push(str);
      return;
    }
    //左侧括号还有剩余
    lCount > 0 && generateStr(lCount - 1, rCount, `${str}(`);
    //剩余左侧括号小于剩余右侧括号
    lCount < rCount && generateStr(lCount, rCount - 1, `${str})`);
  };
  generateStr(n, n, '');
  return res;
}