Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 연속된 차이가 같은 숫자를 찾는 프로그램

<시간/>

모든 연속 숫자 사이의 절대 차이가 K가 되도록 크기가 N인 배열을 찾아야 한다고 가정합니다. 답의 모든 숫자는 숫자 0 자체를 제외하고 선행 0이 없어야 합니다.

따라서 입력이 N =4 K =7과 같으면 출력은 [1818, 2929, 7070, 8181, 9292]가 됩니다. 여기서 0707은 선행 0이 있으므로 유효하지 않습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • N이 1과 같으면

    • 범위 0에서 9까지의 새 목록을 반환

  • queue :=1에서 9까지의 모든 요소로 대기열을 만듭니다.

  • 0 ~ N - 2 범위의 n에 대해 수행

    • len_queue :=큐의 크기

    • 범위 0에서 len_queue - 1에 있는 j의 경우 수행

      • num :=큐의 왼쪽 항목, 큐에서 삭제

      • lsd :=num 모드 10

      • lsd - K>=0이면

        • num * 10 + lsd - 큐 끝에 K 삽입

      • K 및 lsd + K <=9인 경우

        • num * 10 + lsd + 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]