程序,计算Python中相邻对的和为完美平方的排列数
假设我们有一个称为nums的数字列表。我们必须找到num的排列数量,以使每对相邻值的总和是一个完美的平方。当存在一些索引i(其中A [i]与B [i]不同)时,两个置换A和B是唯一的。
因此,如果输入像nums = [2,9,7],则输出将为2,因为我们有[2,7,9]和[9,7,2]
为了解决这个问题,我们将遵循以下步骤-
res:= 0
定义一个功能util()。这需要我
如果i +1与nums的大小相同,则
res:= res + 1
返回
访问过:=一个新的空集
对于范围i + 1到nums大小的j
将s标记为已访问
交换nums [i +1]和nums [j]
实用程序(i + 1)
交换nums [i +1]和nums [j]
s:= nums [i] + nums [j]
如果未访问s并且(s的平方根)^ 2为s,则
从主要方法中执行以下操作-
参观了:=一套新的
对于范围从0到nums的i,执行
实用程序
交换nums [i]和nums [0]
如果未访问nums [0],则
将nums [0]标记为已访问
交换nums [i]和nums [0]
返回资源
让我们看下面的实现以更好地理解-
示例
from math import sqrtclass 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
以上是 程序,计算Python中相邻对的和为完美平方的排列数 的全部内容, 来源链接: utcz.com/z/350128.html