LeetCode-22. 括号生成
题目来源
题目详情
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入: n = 3
输出: ["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入: n = 1
输出: ["()"]
提示:
1 <= n <= 8
题解分析
解法一:递归回溯
- 一看到题目中的“所有”等词语就要下意识的考虑能够使用回溯法来解决问题。
- 本题中,同样可以使用回溯法来解决问题,只不过在回溯的时候需要注意几个问题。
- 第一个问题就是括号的左右区间,左括号的数量一定需要大于右括号的数量。
- 第二点就是,左右括号的数量相加一定等于2*n。
- 具体地,对于dfs函数,可以使用两个参数:open和close来记录左右括号的数量,以此来判断边界。
class Solution {
List<String> ans = new ArrayList<>();
int n;
public List<String> generateParenthesis(int n) {
this.n = n;
dfs(0, 0, "");
return ans;
}
private void dfs(int open, int close, String res){
if(open > n || close > open){
return;
}
if(close + open == 2 * n){
ans.add(res);
}
dfs(open + 1, close, res + "(");
dfs(open, close + 1, res + ")");
}
}
结果展示
Either Excellent or Rusty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本