LeetCode 面试题 08.09. 括号

文章目录

一、题目

括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。

说明:解集不能包含重复的子集。

例如,给出 n = 3,生成结果为:

"((()))", "(()())", "(())()", "()(())", "()()()"

点击此处跳转题目

二、C# 题解

题目比较简单,代码如下。

csharp 复制代码
public class Solution {
    public IList<string> GenerateParenthesis(int n) {
        IList<string> ans = new List<string>();
        Partition(ans, new StringBuilder(), 0, 0, n);
        return ans;
    }

    public void Partition(IList<string> ans, StringBuilder sb, int i, int j, int n) {
        if (i == n && j == n) { // 递归出口
            ans.Add(sb.ToString());
            return;
        }
        if (i == n) { // 左括号添加完,只能添加右括号
            sb.Append(')');
            Partition(ans, sb, i, j + 1, n);
            sb.Remove(sb.Length - 1, 1); // 回溯
        }
        else { // 左、右括号都可以继续添加
            // 先添加左括号
            sb.Append('(');
            Partition(ans, sb, i + 1, j, n);
            sb.Remove(sb.Length - 1, 1); // 回溯
            
            // 如果可以添加右括号,则添加
            if (i > j) {
                sb.Append(')');
                Partition(ans, sb, i, j + 1, n);
                sb.Remove(sb.Length - 1, 1); // 回溯
            }
        }
    }
}
  • 时间:128 ms,击败 100.00% 使用 C# 的用户
  • 内存:43.50 MB,击败 83.33% 使用 C# 的用户
相关推荐
闻缺陷则喜何志丹1 分钟前
【C# WPF】TextBox的数据绑定
ui·c#·wpf·mvvm·数据绑定·textbox
Mr.Winter`2 分钟前
轨迹优化 | 微分动态规划DDP与迭代线性二次型调节器iLQR理论推导
人工智能·算法·机器人·自动驾驶·动态规划·ros·具身智能
小魏每天都学习3 分钟前
【数据结构学习】
算法·图论
客卿1234 分钟前
力扣--数组 入门三题-485/283/27---刷题笔记+思路分析+C语言
c语言·笔记·leetcode
Physicist in Geophy.5 分钟前
矩阵的本质
算法·机器学习·矩阵
小龙报5 分钟前
【算法通关指南:算法基础篇 】贪心专题之简单贪心:1.最大子段和 2.纪念品分组
c语言·数据结构·c++·算法·ios·贪心算法·动态规划
AlenTech6 分钟前
148. 排序链表 - 力扣(LeetCode)
数据结构·leetcode·链表
君义_noip8 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念8 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
英英_9 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab