ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে বলা হয় সংখ্যা। আমাদেরকে সংখ্যার পারমুটেশনের সংখ্যা খুঁজে বের করতে হবে যাতে সন্নিহিত মানের প্রতিটি জোড়ার যোগফল একটি নিখুঁত বর্গ। দুটি পারমুটেশন A এবং B অনন্য হয় যখন কিছু সূচক i থাকে যেখানে A[i] B[i] এর মতো নয়।
সুতরাং, ইনপুট যদি সংখ্যার মত হয় =[2, 9, 7], তাহলে আউটপুট হবে 2, যেমন আমাদের আছে [2, 7, 9] এবং [9, 7, 2]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
res :=0
-
একটি ফাংশন util() সংজ্ঞায়িত করুন। এর জন্য i
লাগবে -
যদি i + 1 সংখ্যার আকারের সমান হয়, তাহলে
-
res :=res + 1
-
ফেরত
-
-
পরিদর্শন করেছেন :=একটি নতুন খালি সেট
-
j রেঞ্জ i + 1 থেকে সংখ্যার আকারের জন্য, করুন
-
s :=সংখ্যা[i] + সংখ্যা[j]
-
যদি s পরিদর্শন না করা হয় এবং (s এর বর্গমূল)^2 s হয়, তাহলে
-
ভিজিট করা হিসাবে চিহ্নিত করুন
-
অদলবদল সংখ্যা[i + 1] এবং সংখ্যা [j]
-
util(i + 1)
-
অদলবদল সংখ্যা [i + 1] এবং সংখ্যা [j]
-
-
-
মূল পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
পরিদর্শন করেছেন :=একটি নতুন সেট
-
আমি 0 থেকে সংখ্যার আকারের মধ্যে, কর
-
অদলবদল সংখ্যা[i] এবং সংখ্যা[0]
-
যদি nums[0] পরিদর্শন না করা হয়, তাহলে
-
util(0)
-
-
পরিদর্শন হিসাবে সংখ্যাগুলি[0] চিহ্নিত করুন
-
অদলবদল সংখ্যা[i] এবং সংখ্যা[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