Java 中的 Strobogrammatic 数

2025年3月17日 | 阅读 3 分钟

在本节中,我们将学习什么是可旋转数,并创建 Java 程序来检查给定的数字是否是可旋转数。Java 可旋转数程序经常出现在 Java 编码面试和学术中。

可旋转数,一个有趣的数学概念,具有独特的性质:旋转 180 度后,它们看起来相同。简而言之,它们有意地读起来相同,例如数字 0、1、8、11、69。分析和理解这些数字不仅探索了数学问题,还提供了程序上的挑战,这也很有趣。

可旋转数

可旋转数是旋转后不变的数值回文。它们是对称的并具有反射性。例如,数字 69 保持不变,在旋转 180 度后变成 96。它在 **OEIS** 序列 **A000787** 中定义,而 **可旋转素数**在 OEIS 序列 **A007597** 中定义。

Strobogrammatic Number in Java

可旋转数示例

前几个可旋转数是:0、1、8、11、69、88、96、101、111、181、609、619、689、808、818、888、906、916、986、1001、1111、1691、1881、1961、6009、6119、6699、6889、6969、8008、8118、8698、8888、8968、9006、9116、9696、9886、9966,……

查找可旋转数

查找可旋转数的方法是,首先,我们确定每个数字在旋转 180 度后会变成什么。每个数字有三种可能性。

要么数字无效,要么保持不变,要么变成不同的数字。

当一个数字旋转 180 度后仍然是一个有效数字时,我们就认为它是可旋转的。如果我们观察数字,我们会发现 0、1、6、8、9 是可旋转的,因为它们是有效数字。因此,如果数字包含除这些之外的任何数字,我们就可以说它不是可旋转数。对于其他数字,我们需要检查它们的旋转是否与其对应位置的数字相同。

让我们在 Java 程序中实现上述方法。

Java 可旋转数程序

在 Java 中,我们探索如何系统地学习可旋转数。一种方法是列出所有可能的在一个长度内的可旋转数,并检查每个数字是否属于这个集合。

文件名:StrobogrammaticNumbers.java

输出

Strobogrammatic numbers of length 3: [101, 609, 808, 906, 111, 619, 818, 916, 181, 689, 888, 986]

解释

findStrobogrammatic() 方法生成长度为 n 的所有可旋转数。

findStrobogrammaticHelper() 方法通常返回可旋转数。

我们遍历中间数字,并添加两个反射数字来创建可旋转数。

复杂度

时间复杂度:O(n)

空间复杂度: O(1)

结论

可旋转数因其有趣的性质,为数学和组织结构提供了迷人的见解。在 Java 中,我们可以使用递归方法来查找和优化这些数字。将可旋转数添加到我们的编程工具库中,不仅可以提高我们的问题解决能力,还可以为我们的代码增添一点数学的优雅。进一步探索,尝试不同的技术,并在你的 Java 项目中拥抱可旋转数的美。


下一个主题Java 的 5 种类型