Python程序:查找具有相同连续差的数字


假设我们需要找到一个大小为 N 的数组,使得每两个连续数字之间的绝对差为 K。答案中的每个数字都不能有前导零,除非数字本身为 0。

因此,如果输入为 N = 4 K = 7,则输出将为 [1818, 2929, 7070, 8181, 9292],这里 0707 无效,因为它有前导 0。

为了解决这个问题,我们将遵循以下步骤:

  • 如果 N 等于 1,则

    • 返回一个从 0 到 9 的新列表

  • 队列 := 创建一个包含 1 到 9 所有元素的队列

  • 对于范围 0 到 N - 2 中的 n,执行以下操作:

    • 队列长度 := 队列的大小

    • 对于范围 0 到队列长度 - 1 中的 j,执行以下操作:

      • 数字 := 队列的左侧项目,并将其从队列中删除

      • 最低有效位 := 数字模 10

      • 如果最低有效位 - K >= 0,则

        • 将数字 * 10 + 最低有效位 - K 插入队列的末尾

      • 如果 K 和最低有效位 + K <= 9,则

        • 将数字 * 10 + 最低有效位 + K 插入队列的末尾

  • 返回队列的元素

示例

让我们看看下面的实现以更好地理解:

from collections import deque
def solve(N, K):
   if N == 1:
      return list(range(10))
   queue = deque(list(range(1, 10)))
   for n in range(N - 1):
      len_queue = len(queue)
      for j in range(len_queue):
         num = queue.popleft()
         lsd = num % 10
         if lsd - K >= 0:
            queue.append( num * 10 + lsd - K )
         if K and lsd + K <= 9:
            queue.append( num * 10 + lsd + K )
   return list(queue)

N = 4
K = 7
print(solve(N, K))

输入

4, 7

输出

[1818, 2929, 7070, 8181, 9292]

更新于:2021年10月7日

296 次查看

启动您的职业生涯

完成课程后获得认证

开始
广告