考察的知识点:回溯;
解答方法分析:
- 创建一个空的字符串cur,用来存储当前生成的括号序列。
- 创建一个整数变量openCount和closeCount,分别用来记录已经的左括号和右括号的数量。
- 创建一个容器result,用来存储所有可能的括号序列。
- 在回溯函数中,首先判断边界条件,如果已经使用的左括号数量大于等于n,且已经使用的右括号数量等于n,则说明已经生成了一个有效的括号序列,将其添加到result中并返回。
- 在回溯函数中,首先尝试添加一个左括号到当前序列中,同时递增openCount,并递归调用回溯函数。
- 在递归调用返回后,回溯函数中将openCount递减,并尝试添加一个右括号到当前序中,同时递增closeCount,并递归调用回溯函数。
- 在递归调用返回后,回溯函数中将closeCount递减,并将当前添加的括号从序列中删除,即恢复到之前的状态。
- 在主函数中,调用回溯函数生成所有可能的括号序列,并返回结果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); } } };