Java 中的 Zygodromes

2024年9月10日 | 阅读 6 分钟

由相同数字组成且非平凡地运行的正数称为 Zygodrome。这意味着如果相同的数字总是在数字中成对出现(成双成对),则该数字称为 Zygodrome。Zyg 是一个希腊词,意思是结合或对。

示例:1

输入

int n = 99

输出: 99 是一个 Zygodrome。

解释: 在数字 99 中,数字 9 是成对出现的。因此,数字 99 是 Zygodrome。

示例:2

输入

int n = 909

输出: 909 不是 Zygodrome。

解释: 在数字 909 中,数字 9 不是成对出现的。两个 9 之间有一个数字 0。因此,数字 909 不是 Zygodrome。

例如:3

输入

int n = 1100

输出: 1100 是一个 Zygodrome。

解释: 在数字 1100 中,数字 1 是成对出现的,数字 0 也是成对出现的。因此,数字 1100 是 Zygodrome。

示例: 4

输入

int n = 4224

输出: 4224 不是 Zygodrome。

解释: 在数字 4224 中,数字 4 不是成对出现的,因为两个 4 之间有一个 2 的对。因此,数字 4224 不是 Zygodrome。

示例: 5

输入

int n = 442244

输出: 442244 是一个 Zygodrome。

解释: 在数字 442244 中,数字 4 是成对出现的,数字 2 也是成对出现的。因此,数字 442244 是 Zygodrome。

方法: 使用 While 循环

我们可以使用一个 while 循环。while 循环将遍历给定数字的各位,并借助辅助数组检查数字是否为 Zygodrome。

文件名: Zygodromes.java

输出

The number 99 is a Zygodrome.

The number 909 is not a Zygodrome.

The number 1100 is a Zygodrome.

The number 4224 is not a Zygodrome.

The number 442244 is a Zygodrome.

复杂度分析: 程序使用了两个嵌套的 while 循环。但是,内层循环也遍历了输入数字的各位,并且还减小了输入数字。因此,程序的时间复杂度为 O(d),其中 d 是输入数字中存在的总位数。程序使用了一个辅助数组。但是,辅助数组的大小是固定的。因此,程序空间复杂度为 O(1)。

方法: 使用 String

我们可以将输入数字转换为字符串,然后比较字符串的当前、下一个和上一个字符,以检查它们是否相同。这可以使用一个循环来实现。请看下面的程序。

文件名: Zygodromes.java

输出

The number 99 is a Zygodrome.

The number 909 is not a Zygodrome.

The number 1100 is a Zygodrome.

The number 4224 is not a Zygodrome.

The number 442244 is a Zygodrome.

复杂度分析: 程序的时间和空间复杂度与上一个程序相同。