LeetCode(22) - Generate Parentheses
题目要求给你一个数字n,代表有n个括号()。然后输出n个括号可能的组合。如n=2时,就是"()() (())"。
如以前讲过,当需要列出所有可能的组合的时候,我们优先想到的就是backtracking。思路大概是这样子:用两个数字left和right纪录当前“剩余”(还没有没有加上)的括号数,对于其中一层递归,当加一个左括号,left减1,进入下一层。而在当层,如果right > left,就加一个右括号,进入另外一个递归。知道left = right = 0为止,递归结束。
代码如下:
1 public class Solution { 2 public List<String> generateParenthesis(int n) { 3 List<String> list = new ArrayList<String>(); 4 if (n > 0) { 5 generateParenthesisHelper(list,"",n,n); 6 } 7 return list; 8 } 9 10 private void generateParenthesisHelper(List<String> list, String s, int left, int right) { 11 //递归结束条件。 12 if (right == 0) { 13 list.add(s); 14 return; 15 } 16 17 //当left>0,加一个"(",left-1,进入下一层。 18 if (left > 0) { 19 generateParenthesisHelper(list,s + "(",left-1,right); 20 } 21 22 //当right>left,加一个")",right-1,进入另一个递归(比上面递归多一个右括号)。 23 if (right > left) { 24 generateParenthesisHelper(list,s + ")",left,right-1); 25 } 26 } 27 }
分类:
LeetCode刷题
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 2025成都.NET开发者Connect圆满结束
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络