Java 中的星形数2025年03月17日 | 阅读 9 分钟 在本节中,我们将学习 Java 中的星形数。星形数类似于中国跳棋棋盘。星形数是一个六角星。这里,六角星表示一个六角尖的星。请看下图。 ![]() 在数学上,该数表示为 Sn = 6 x n x (n - 1) + 1,其中 n >= 1 因此, S1 = 6 x 1 x (1 - 1) + 1 = 6 x 1 x 0 + 1 = 0 + 1 = 1 S2 = 6 x 2 x (2 - 1) + 1 = 6 x 2 x 1 + 1 = 12 + 1 = 13 S3 = 6 x 3 x (3 - 1) + 1 = 6 x 3 x 2 + 1 = 36 + 1 = 37 S4 = 6 x 4 x (4 - 1) + 1 = 6 x 4 x 3 + 1 = 72 + 1 = 73 S5 = 6 x 5 x (5 - 1) + 1 = 6 x 5 x 4 + 1 = 120 + 1 = 121 S6 = 6 x 6 x (6 - 1) + 1 = 6 x 6 x 5 + 1 = 180 + 1 = 181 实施在 Java 中有三种方法可以编写星形数的代码。一种是使用上面定义的公式,另一种是递归,最后一种是迭代。让我们从基于公式的方法开始。 基于公式的方法文件名:StarNumbers.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:上述程序的时间复杂度为 O(n),其中 n 是要找到的星形数的总数。 空间复杂度:上述程序没有使用任何额外空间;因此,上述程序的空间复杂度为 O(1)。 递归方法使用递归也可以计算星形数。但是,在实现递归之前,必须了解计算星形数的递归公式。递归公式定义为 Sn = Sn - 1 + 12 x (n - 1),其中 n >= 2 且 S1 = 1 因此, S2 = S2 - 1 + 12 x (2 - 1) = S1 + 12 x 1 = 1 + 12 = 13 S3 = S3 - 1 + 12 x (3 - 1) = S2 + 12 x 2 = 13 + 24 = 37 S4 = S4 - 1 + 12 x (4 - 1) = S3 + 12 x 3 = 37 + 36 = 73 S5 = S5 - 1 + 12 x (5 - 1) = S4 + 12 x 4 = 73 + 48 = 121 S6 = S6 - 1 + 12 x (6 - 1) = S5 + 12 x 5 = 121 + 60 = 181 请看下面的 Java 代码。 文件名:StarNumbers1.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:为了找到第 n 个星形数,必须递归地从 n 到 1。因此,上述程序的时间复杂度为 O(n2),其中 n 是要计算的星形数的总数。 空间复杂度:如果我们忽略由于递归引起的隐式内存消耗,则上述程序的空间复杂度为 O(1)。 为了优化上述程序,必须使用记忆化技术。以下程序显示了这一点。 文件名:StarNumbers2.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:由于记忆化技术,上述程序的时间复杂度为 O(n),其中 n 是要计算的星形数的总数。 空间复杂度:上述程序的空间复杂度为 O(n),其中 n 是要计算的星形数的总数。 迭代方法使用循环也可以轻松计算星形数的值。以下程序显示了这一点。 文件名:StarNumbers3.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:由于在计算每个星形数时使用了 for 循环,因此上述程序的时间复杂度为 O(n2),其中 n 是要找到的星形数的总数。 空间复杂度:上述程序的空间复杂度为 O(n),其中 n 是要计算的星形数的总数。 我们可以优化上述代码以降低时间复杂度。请看以下程序。 文件名:StarNumbers4.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:由于只有一个循环用于计算星形数;因此,上述程序的时间复杂度为 O(n),其中 n 是要找到的星形数的总数。 空间复杂度:上述程序的空间复杂度为 O(n),其中 n 是要计算的星形数的总数。 我们仍然可以做一些优化以减少程序的空间复杂度。如果我们观察递归公式,我们会发现第 n 个星形数依赖于第 (n - 1) 个星形数,而第 (n - 1) 个星形数依赖于第 (n - 2) 个星形数,依此类推。这意味着当前的星形数依赖于前一个星形数。因此,我们不需要数组来存储星形数。我们所要做的就是将前一个星形数存储在一个变量中以计算当前星形数。以下程序显示了这一点。 文件名:StarNumbers5.java 输出 The first 10 star numbers are: 1 13 37 73 121 181 253 337 433 541 时间复杂度:由于只有一个循环用于计算星形数;因此,上述程序的时间复杂度为 O(n),其中 n 是要找到的星形数的总数。 空间复杂度:由于我们只使用两个变量来计算星形数;因此,上述程序的空间复杂度为 O(1)。 与其他数字的关系
下一个主题Java 中的 3N+1 问题 |
Bus Reservation System 是一个用 Java 编写的基本控制台应用程序,用户可以在其中查看可供预订的巴士,以及预订座位和管理活动预订。该系统有效地处理座位管理,为用户提供无缝的预订体验。该项目实现了面向对象的...
阅读 8 分钟
Java.nio.DoubleBuffer 具有 compact() 函数。要压缩提供的缓冲区,请使用 DoubleBuffer 类。值从缓冲区的起始点和其限制转移到缓冲区。,n+1 被分配到缓冲区的插槽,并且其容量设置为...
阅读 3 分钟
Java 与 Core Java 的区别 Java 是一种以其简洁性、面向对象特性和平台独立性而闻名的编程语言。它包含三个主要版本:Java 标准版 (JSE)、Java 企业版 (JEE) 和 Java 微型版 (JME)。另一方面,Core Java 特别...
5 分钟阅读
持续集成(CI)和持续交付(CD)已成为现代软件开发实践的重要组成部分。这些方法旨在加强协作、提高代码质量并加速软件交付。Java 作为构建健壮且可扩展应用程序的常用编程语言,在...
阅读 2 分钟
Java Spring 的优缺点 Spring 框架使 Java 编程对每个人来说都更快、更容易、更安全。它的简单性、速度和生产力使其成为世界上最受欢迎的框架。在本节中,我们将讨论 Java Spring 的优点和缺点。Java Spring 有一个...
阅读 3 分钟
在 Java 中,有多种方法可以计算电费。我们可以使用静态值、命令行参数、方法和函数、用户定义方法以及 do-while 和 for 循环来计算电费。让我们一一了解它们:使用静态方法在这种情况下...
5 分钟阅读
java.text.CollationElementIterator 类有一个方法。可以使用 CollationElementIterator 类获取 CollationElementIterator 当前指向的排序器中的项目索引。语法:public int getOffset() 参数:此方法不接受任何参数。返回值:元素的偏移量...
阅读 2 分钟
? 在 Java 中,字符串分割是一项重要且常用的操作。Java 提供了多种分割字符串的方法。但最常见的方法是使用 String 类的 split() 方法。在本节中,我们将学习如何分割一个...
阅读9分钟
连续素数之和是指将一系列连续的素数相加所得到的结果。为了在 Java 中找到和等于给定值的连续素数,我们可以使用滑动窗口方法。一些...
5 分钟阅读
Java Scanner 类提供了 Int() 方法来读取整数值,Double() 方法来读取双精度值,Long() 方法来读取长整数值,等等。但是 Scanner 类中没有 Char() 方法来读取 Java 中的字符。在本节中,我们……
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India