मान लीजिए हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है। हमें संख्याओं के क्रमपरिवर्तन की संख्या इस प्रकार ज्ञात करनी है कि आसन्न मानों के प्रत्येक युग्म का योग एक पूर्ण वर्ग हो। दो क्रमपरिवर्तन ए और बी अद्वितीय हैं जब कुछ इंडेक्स i होता है जहां ए [i] बी [i] के समान नहीं होता है।
इसलिए, यदि इनपुट nums =[2, 9, 7] जैसा है, तो आउटपुट 2 होगा, जैसा कि हमारे पास [2, 7, 9] और [9, 7, 2]
है।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रेस :=0
-
उपयोग() फ़ंक्शन को परिभाषित करें। इसमें मुझे लगेगा
-
अगर i + 1 अंकों के आकार के समान है, तो
-
रेस :=रेस + 1
-
वापसी
-
-
विज़िट किया गया :=एक नया खाली सेट
-
j के लिए i + 1 से लेकर अंकों के आकार तक, करें
-
एस:=अंक [i] + अंक [जे]
-
यदि s का दौरा नहीं किया गया है और (s का वर्गमूल)^2 s है, तो
-
s को विज़िट किया गया के रूप में चिह्नित करें
-
स्वैप nums[i + 1] और nums[j]
-
उपयोग (i + 1)
-
स्वैप nums[i + 1] और nums[j]
-
-
-
मुख्य विधि से निम्न कार्य करें -
-
विज़िट किया गया :=एक नया सेट
-
मैं के लिए 0 से लेकर अंकों के आकार तक, करें
-
स्वैप nums[i] और nums[0]
-
अगर nums[0] का दौरा नहीं किया जाता है, तो
-
उपयोग (0)
-
-
अंक [0] देखे गए के रूप में चिह्नित करें
-
स्वैप nums[i] और nums[0]
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from math import sqrt class Solution: def solve(self, nums): self.res = 0 def util(i): if i + 1 == len(nums): self.res += 1 return visited = set() for j in range(i + 1, len(nums)): s = nums[i] + nums[j] if s not in visited and int(sqrt(s)) ** 2 == s: visited.add(s) nums[i + 1], nums[j] = nums[j], nums[i + 1] util(i + 1) nums[i + 1], nums[j] = nums[j], nums[i + 1] visited = set() for i in range(len(nums)): nums[i], nums[0] = nums[0], nums[i] if nums[0] not in visited: util(0) visited.add(nums[0]) nums[i], nums[0] = nums[0], nums[i] return self.res ob = Solution() nums = [2, 9, 7] print(ob.solve(nums))
इनपुट
[2, 9, 7]
आउटपुट
2