Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับจำนวนการเรียงสับเปลี่ยนที่ผลรวมของคู่ที่อยู่ติดกันเป็นกำลังสองสมบูรณ์ใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums เราต้องหาจำนวนการเรียงสับเปลี่ยนของ num โดยที่ผลรวมของค่าที่อยู่ติดกันทุกคู่เป็นกำลังสองสมบูรณ์ การเรียงสับเปลี่ยน A และ B สองครั้งจะไม่ซ้ำกันเมื่อมีดัชนี i โดยที่ A[i] ไม่เหมือนกับ B[i]

ดังนั้น หากอินพุตเป็น nums =[2, 9, 7] ผลลัพธ์จะเป็น 2 ตามที่เรามี [2, 7, 9] และ [9, 7, 2]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • res :=0

  • กำหนดฟังก์ชัน util() นี่จะใช้เวลาฉัน

  • ถ้า i + 1 เท่ากับขนาดของ nums แล้ว

    • res :=res + 1

    • กลับ

  • เยี่ยมชม :=ชุดว่างใหม่

  • สำหรับ j ในช่วง i + 1 ถึงขนาดของ nums ทำ

    • s :=nums[i] + nums[j]

    • ถ้า s ไม่ถูกเข้าชม และ (รากที่สองของ s)^2 คือ s แล้ว

      • ทำเครื่องหมายว่าเข้าชมแล้ว

      • สลับ nums[i + 1] และ nums[j]

      • util(i + 1)

      • สลับ nums[i + 1] และ nums[j]

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

  • เข้าชมแล้ว :=ชุดใหม่

  • สำหรับฉันในช่วง 0 ถึงขนาดของ nums ทำ

    • สลับ nums[i] และ nums[0]

    • หากไม่ได้เยี่ยมชม nums[0] แล้ว

      • util(0)

    • ทำเครื่องหมาย nums[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