मान लीजिए हमें आकार N का एक ऐरे ढूंढना है जिससे हर दो लगातार अंकों के बीच का निरपेक्ष अंतर K हो। उत्तर में हर संख्या में लीडिंग जीरो नहीं होने चाहिए सिवाय संख्या 0 के।
उदाहरण के लिए, यदि इनपुट N = 4, K = 7 है, तो आउटपुट [1818, 2929, 7070, 8181, 9292] होगा, यहां 0707 वैध नहीं है क्योंकि इसमें लीडिंग 0 है।
हल करने के चरण
- यदि
N == 1, तो 0 से 9 तक की रेंज से एक नई सूची वापस करें। queue :=1 से 9 तक के सभी तत्वों के साथ एक क्यू बनाएं।nको 0 सेN - 2तक लूप चलाएं:len_queue := queueका आकारjको 0 सेlen_queue - 1तक लूप चलाएं:num := queueका बायां आइटम, और इसे क्यू से हटा दें।lsd := num % 10- यदि
lsd - K >= 0, तोnum * 10 + lsd - Kको क्यू के अंत में डालें। - यदि
Kऔरlsd + K <= 9, तोnum * 10 + lsd + Kको क्यू के अंत में डालें।
queueके तत्व वापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
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]