मान लीजिए हमारे पास दो मान n और k हैं। अब श्रेणी 1 से n [1, 2, ..., n] में संख्याओं की एक सूची पर विचार करें और इस सूची के प्रत्येक क्रमपरिवर्तन को लेक्सिकोग्राफ़िक अनुक्रम में उत्पन्न करें। उदाहरण के लिए, यदि n =4 हमारे पास [1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431, 3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132, 4213, 4231, 4312, 4321]। हमें इस क्रमपरिवर्तन अनुक्रम के kth मान को एक स्ट्रिंग के रूप में खोजना होगा।
इसलिए, यदि इनपुट n =4 k =5 जैसा है, तो आउटपुट "1432" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन फ़ैक्टर () को परिभाषित करें। यह संख्या लेगा
-
यथा :=संख्या
-
res :=एक डबल एंडेड कतार और शुरुआत में 0 डालें
-
मैं :=2
-
जबकि यथा खाली नहीं है, करें
-
quo :=भागफल (quo/i), रेम :=quo mod i
-
रेस के बाईं ओर रेम डालें
-
मैं :=मैं + 1
-
-
रिटर्न रेस
-
मुख्य विधि से निम्न कार्य करें -
-
संख्याएं :=1 से n तक के मान वाली एक सूची
-
रेस :=खाली स्ट्रिंग
-
के_तथ्य:=कारक(के)
-
जबकि k_fact का आकार <संख्याओं का आकार, करें
-
रेस:=संख्याओं के पहले तत्व को स्ट्रिंग के रूप में संयोजित करें, फिर संख्याओं के पहले तत्व को हटा दें
-
-
k_fact में प्रत्येक अनुक्रमणिका के लिए, करें
-
संख्या :=अनुक्रमणिका−संख्याओं का वां तत्व, फिर उस तत्व को हटा दें
-
रेस :=रेस कॉन्टेनेट नंबर
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import deque def factors(num): quo = num res = deque([0]) i = 2 while quo: quo, rem = divmod(quo, i) res.appendleft(rem) i += 1 return res class Solution: def solve(self, n, k): numbers = [num for num in range(1, n + 1)] res = "" k_fact = factors(k) while len(k_fact) < len(numbers): res += str(numbers.pop(0)) for index in k_fact: number = numbers.pop(index) res += str(number) return res ob = Solution() n = 4 k = 5 print(ob.solve(n, k))
इनपुट
4, 5
आउटपुट
1432