考察的知识点:回溯;

解答方法分析:

  1. 创建一个空的字符串cur,用来存储当前生成的括号序列。
  2. 创建一个整数变量openCount和closeCount,分别用来记录已经的左括号和右括号的数量。
  3. 创建一个容器result,用来存储所有可能的括号序列。
  4. 在回溯函数中,首先判断边界条件,如果已经使用的左括号数量大于等于n,且已经使用的右括号数量等于n,则说明已经生成了一个有效的括号序列,将其添加到result中并返回。
  5. 在回溯函数中,首先尝试添加一个左括号到当前序列中,同时递增openCount,并递归调用回溯函数。
  6. 在递归调用返回后,回溯函数中将openCount递减,并尝试添加一个右括号到当前序中,同时递增closeCount,并递归调用回溯函数。
  7. 在递归调用返回后,回溯函数中将closeCount递减,并将当前添加的括号从序列中删除,即恢复到之前的状态。
  8. 在主函数中,调用回溯函数生成所有可能的括号序列,并返回结果result。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    vector<string> generateParenthesis(int n) {
        vector<string> result;
        backtrack(n, n, "", result);
        return result;
    }

  private:
    void backtrack(int openCount, int closeCount, string cur,
                   vector<string>& result) {
        if (openCount == 0 && closeCount == 0) {
            result.push_back(cur);
            return;
        }
        if (openCount > 0) {
            backtrack(openCount - 1, closeCount, cur + "(", result);
        }
        if (closeCount > openCount) {
            backtrack(openCount, closeCount - 1, cur + ")", result);
        }
    }
};