모든 연속 숫자 사이의 절대 차이가 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]