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# 的用户
相关推荐
消失的旧时光-19438 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
智者知已应修善业19 分钟前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
AI进化营-智能译站1 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
chao1898441 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
月昤昽2 小时前
autocad二次开发 2.旋转
c#·autocad·autocad二次开发
CS创新实验室2 小时前
从盘边到芯端——硬盘接口七十年变迁史
算法·磁盘调度
rockey6272 小时前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
工程师0072 小时前
C# 字符串不可变性 + 字符串驻留池原理
c#·字符串拘留池
xvhao20132 小时前
单源、多源最短路
数据结构·c++·算法·深度优先·动态规划·图论·图搜索算法
MATLAB代码顾问2 小时前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab