Java 中的 Dyck Path17 Mar 2025 | 6 分钟阅读 在 Java 编程中,Dyck 路径是一种以特定方式探索网格的方法。考虑一个正方形网格,您希望在保持在对角线之上到达右上角。这里的想法是看看有多少种不同的路径可供您使用。 考虑一个 n × n 的正方形网格,左上角索引为 (0, 0)。Dyck 路径是连接左下角 (n-1, 0) 和右上角 (0, n-1) 的唯一行走路径。路径必须始终保持在从网格左下角到右下角的对角线之上。 这里的目标是确定并计算符合这些条件的 Dyck 路径的总数,即连接点 (n-1, 0) 到 (0, n-1) 的路径。 示例 1 输入: n = 1 输出 1 示例 2 输入: n = 4 输出 14 示例 3 输入: n = 6 输出 132 示例 4 输入: n = 8 输出 1430 ![]() 方法:使用 Catalan 数计算 Dyck 路径的方法基于 Catalan 数公式 C_n = (2n)! / [(n + 1)! * n!] 该公式表示长度为 2n 的 Dyck 路径的数量,该路径起源于点 (n-1, 0) 并结束于点 (0, n-1)。另一种表达方式是通过乘积 C_n = Π (n + k) / k, k 从 2 到 n 其中 n 是非负整数,k 的范围是从 2 到 n。该公式利用 Catalan 数的性质有效地计算了有效 Dyck 路径的数量。 算法步骤 1: 从 main 方法开始。 步骤 2: 初始化一个整型变量 n,并设置为所需 Dyck 路径的长度。 步骤 3: 调用 countDyckPaths 方法,并将 n 作为参数传递。 步骤 4: 在 countDyckPaths 方法中
步骤 5: 在 calculateCatalanNumber 方法中
步骤 6: 在 main 方法中打印获得的结果,表明指定长度的 Dyck 路径的数量。 实施文件名: DyckPathsUsingCatalan.java 输出 Number of Dyck paths of length 4: 14 时间复杂度: 上述代码的时间复杂度为 O(n),其中 n 是要计算 Dyck 路径数量的输入值。这是因为 calculateCatalanNumber 方法在 0 到 n 的范围内进行迭代,并在每次迭代中执行常数时间的操作。 辅助空间: 代码的辅助空间复杂度为 O(1),这意味着它使用的额外空间量是恒定的,与输入值 n 无关。 方法:直接组合直接组合方法(如提供的代码所示)在不显式生成数学结构(如 Catalan 数)的情况下进行计算。它直接使用组合公式计算所需结果,而无需遍历或生成结构的各个实例。 算法步骤 1: 从 main 方法开始。 步骤 2: 初始化一个整型变量 length,并设置为所需 Dyck 路径的长度。 步骤 3: 调用 countDyckPaths 方法,并将 length 作为参数传递。 步骤 4: 在 countDyckPaths 方法中
步骤 5: 在 calculateFactorial 方法中
步骤 6: 在 main 方法中打印获得的结果,表明指定长度的 Dyck 路径的数量。 实施文件名: DyckPathCounter.java 输出 The number of Dyck paths with a length of 4 is: 14 时间复杂度: 提供的代码的时间复杂度为 O(n),因为最耗时的操作是计算阶乘。通过一个从 1 到 'n' 迭代的循环来完成计算。由于循环的每次迭代都会增加成比例的工作量,因此总体时间复杂度会随着输入大小 'n' 线性增长,从而导致 O(n) 的时间复杂度。 辅助空间: 代码的辅助空间复杂度为 O(1),因为它使用的额外内存量是固定的,与输入值 'n' 无关。numerator、denominator 和 result 等变量占用的空间量是恒定的,并且该分配不随 'n' 的大小而变化。因此,辅助空间复杂度不依赖于输入大小。 |
在 Java 中,有多种方法可以计算电费。我们可以使用静态值、命令行参数、方法和函数、用户定义方法以及 do-while 和 for 循环来计算电费。让我们一一了解它们:使用静态方法在这种情况下...
5 分钟阅读
大多数时候我们需要比较两个日期和日期时间对象。当我们要从数据库中获取特定日期和时间的数据或根据日期和时间过滤返回的数据时,就需要进行日期比较。为了...
阅读 3 分钟
组合设计模式是一种设计模式,它允许我们将对象排列成树形结构来表示部分-整体设计。它允许客户精确地处理单个项目和包。简单来说,它允许我们将单个对象与...
5 分钟阅读
在引入线程概念之前,我们无法并行运行多个任务。这是一个缺点,为了消除这个缺点,引入了线程概念。线程是一个非常轻量级的进程,或者我们可以说它是...的最小部分。
阅读 8 分钟
事件是 Java 中最重要的概念之一。对象状态或行为因执行操作而发生的变化在 Java 中称为事件。操作包括按钮单击、按键、页面滚动或光标移动。Java 提供了一个 java.awt.event 包...
7 分钟阅读
矩阵垂直翻转的问题陈述涉及获取二维矩阵并反转其行顺序,本质上是垂直翻转它。从数学上讲,如果原始矩阵表示为 M,垂直翻转的矩阵表示为 M',则转换可以表示为……
阅读 6 分钟
在 C 和 C++ 编程语言中,从一个函数调用另一个函数的过程称为回调。函数的内存地址表示为函数指针。在 C 和 C++ 语言中,通过将函数指针传递给另一个函数来实现回调。与 C 不同...
阅读 4 分钟
克隆是 Java 中的一个基本概念,它允许开发人员创建对象的副本。此过程对于各种场景至关重要,例如保存对象的状态、创建备份或实现某些设计模式。但是,Java 提供了两种不同的类型...
7 分钟阅读
通过交换行来排列二进制网格,使其交换次数最少,这是一个令人兴奋的问题,它需要将给定的二进制网格转换为特定形式。目标是确保网格中的每行 i 都至少...
阅读 31 分钟
?将日期从 Java 应用程序添加到 MySQL 数据库是处理与日期相关数据时的一项常见要求。在本文中,我们将指导您完成使用 Java 在 MySQL 中添加日期的过程。我们将涵盖必要的步骤,包括建立...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India