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# 的用户
相关推荐
leaves falling14 小时前
c语言-根据输入的年份和月份,计算并输出该月份的天数
c语言·开发语言·算法
jghhh0114 小时前
锥束CT(CBCT)三维重构算法:FDK算法详解与实现
线性代数·算法·重构
世界唯一最大变量14 小时前
此算法能稳定求出柏林52城问题最优解7540.23(整数时为7538),比传统旅行商问题的算法7544.37还优
前端·python·算法
元亓亓亓14 小时前
LeetCode热题100--139. 单词拆分--中等
算法·leetcode·职场和发展
Eloudy14 小时前
通过示例看 C++ 函数对象、仿函数、operator( )
开发语言·c++·算法
释怀°Believe14 小时前
Daily算法刷题【面试经典150题-6️⃣kadane/】
算法·面试·职场和发展
薯片锅巴14 小时前
代码随想录算法训练营第四十四天:孤岛计数(广搜版),孤岛计数(深搜版),最大岛屿的面积
算法
海清河晏11114 小时前
Linux进阶篇:深入理解线程
java·jvm·算法
yong999014 小时前
基于压缩感知与后向投影算法的合成孔径雷达成像实现
算法
蒙奇D索大14 小时前
【数据结构】排序算法精讲 | 插入排序全解:稳定性、复杂度与实战代码剖析
数据结构·算法·排序算法