Jumping Number in Java

2025 年 5 月 6 日 | 阅读 7 分钟

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

跳跃数

如果数字 N 的所有相邻数字的绝对差为 1,则称 N 为跳跃数。请注意,9 和 0 之间的差不被视为 1。因此,所有个位数都被视为跳跃数。

跳跃数示例

例如,数字 76789 是一个跳跃数,因为每个相邻数字的差为 1。

数字 952不是跳跃数,因为相邻数字的差分别为 4 和 3。

Jumping Number in Java

其他跳跃数有 45676、212、121、123、210、212、232、234、321、323、343、345、432、434、454、456、543、545、565、567、654、656、676、678、765、767、787、789、876 等。

查找跳跃数的步骤

  1. 读取或初始化一个数字 N。
  2. 迭代整数,从 0 到 N。
  3. 对于每个整数,迭代其各位数字。
    • 检查当前数字和前一个数字的差是否为 1。
  4. 如果当前整数的所有相邻数字都相差 1,则将该整数添加到跳跃数列表中。

让我们在 Java 程序中实现上述逻辑。

跳跃数 Java 程序

JumpingNumberExample1.java

输出 1

Enter a number: 121
121 is a jumping number.

输出 2

Enter a number: 7839
7839 is not a jumping number.

打印给定范围内的所有跳跃数

有两种方法可以打印给定范围内的所有跳跃数

  • 使用 DFS
  • 使用 BFS

使用 DFS

在 DFS 中,我们不检查每个整数,而是直接打印所有跳跃数。为了实现这一点,我们从第一个跳跃数即 0 开始,并为其附加一个新数字,使下一个数字和前一个数字之间的差为 1。

请注意,如果前一位数字是 0,则唯一可能的下一个数字是 1,这将生成下一个跳跃数,即 1。类似地,对于数字 9,唯一可能的下一个数字是 8,而不是 10。但是对于数字 1 到 8,我们总是有两个下一个数字的选项(一个小于它,一个大于它)。

上述过程以 1 重复。此时,下一个数字有两个可能的选项,即 2 和 0,它们生成两个新的跳跃数,即 12 和 10。

在这种方法中,我们将数字视为图的节点。让我们看看 DFS 中实现的步骤。

  • 上述方法可以通过将数字视为图的节点来实现。
  • 从节点 '0' 开始,在图上应用 DFS。
  • 基本条件:如果生成的节点或数字大于 N,则停止该节点的遍历并返回。
  • 如果数字小于 N,则将当前节点或数字添加到跳跃列表中。
  • 现在,要从一个节点转移到下一个节点,请在当前节点后面附加数字,以便生成的下一个数字也是一个跳跃数,然后递归调用 DFS 到下一个节点。
  • 如果我们想生成所有跳跃数,则通过将剩余的整数 2-9 作为起始节点来重复上述算法。
  • 最后,对跳跃数列表进行排序并返回。

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

JumpingNumberExample2.java

输出

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98, 101]

让我们来看一个相同的程序,但在下面的程序中我们没有使用 DFS。

JumpingNumberExample3.java

输出

Jumping numbers for specified range are: 
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98, 101, 121, 123

使用 BFS

该方法与 DFS 类似。但是,除了使用 DFS,我们还可以使用 BFS 来生成图。让我们来看看这个方法。

  1. 初始化一个空队列。
  2. 将起始节点即 '0' 推入队列。
  3. 重复以下步骤,直到队列为空
    1. 从队列中弹出顶部节点,这将是当前节点。
    2. 如果当前节点(数字)小于或等于 N,则将其添加到跳跃数列表中。
    3. 并通过在当前节点后面附加数字来生成下一个节点,以便生成的下一个数字(节点)也是一个跳跃数。然后将该数字推入队列。
    4. 否则,移动到队列中的下一个节点。
  4. 为了生成所有跳跃数,通过将剩余的整数 2-9 作为起始节点来重复上述算法。
  5. 最后,对跳跃数列表进行排序并返回。

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

JumpingNumberExample4.java

输出

Jumping numbers for specified range are: 
0 1 10 12 101 121 123 2 21 23 210 212 232 234 3 32 34 321 323 343 345 4 43 45 432 434 454 456 5 54 56 6 65 67 7 76 78 8 87 89 9 98