括号生成(回溯)
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
class Solution { public: // 存储所有可能的有效括号组合的结果集 vector<string> res; // 临时字符串,用于构建当前递归路径下的括号组合 string s; // 回溯函数,用于生成所有有效括号的组合 // left: 当前已经使用的左括号 '(' 的数量 // right: 当前已经使用的右括号 ')' 的数量 // n: 每种括号对的数量,即最终结果中每种括号出现的次数 void backtrack(int left, int right, int n) { // 如果当前构建的字符串长度达到了2*n,说明一组有效括号组合已完成 if (s.size() == 2 * n) { // 将当前构建好的有效括号组合加入到结果集中 res.push_back(s); return; } // 如果左括号的数量还没有达到n,则可以放置一个左括号 if (left < n) { s.push_back('('); // 放置左括号 backtrack(left + 1, right, n); // 继续递归构建剩余部分 s.pop_back(); // 回溯:撤销上一步的选择,尝试其他可能性 } // 如果右括号的数量小于左括号的数量,则可以放置一个右括号 if (right < left) { s.push_back(')'); // 放置右括号 backtrack(left, right + 1, n); // 继续递归构建剩余部分 s.pop_back(); // 回溯:撤销上一步的选择,尝试其他可能性 } } // 主函数,返回所有组合的、有效的括号序列 // n: 每种括号对的数量 vector<string> generateParenthesis(int n) { // 调用回溯函数开始搜索 backtrack(0, 0, n); // 返回最终找到的所有有效括号组合 return res; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探