📅  最后修改于: 2023-12-03 15:27:36.121000             🧑  作者: Mango
给定一个单向链表,求出链表的所有节点的两个最近的完全平方之间的距离之和。
例如,链表为 [1, 2, 3, 4, 5, 6, 7, 8, 9],节点 2 和节点 4 的距离为 1,节点 4 和节点 9 的距离为 1,节点 2 和节点 9 的距离为 2,因此距离之和为 4。
首先,我们需要计算出一个数是否是完全平方数,并且计算出这个数的平方根。
然后,我们遍历链表,对于每个节点,向后遍历找到下一个完全平方数,计算两者之间的距离,并将这个距离加入到总距离中。
import math
def is_perfect_square(num):
"""
判断一个数是否是完全平方数,并返回它的平方根
"""
sqrt = int(math.sqrt(num))
return sqrt*sqrt == num, sqrt
def distance(node, next_node):
"""
计算两个节点之间的距离
"""
return next_node - node
def sum_of_distances(nums):
"""
给定一个单向链表,求出链表的所有节点的两个最近的完全平方之间的距离之和
"""
total_distance = 0
i = 0
while i < len(nums):
is_square, sqrt = is_perfect_square(nums[i])
if is_square:
j = i + 1
while j < len(nums):
is_next_square, next_sqrt = is_perfect_square(nums[j])
if is_next_square:
total_distance += distance(sqrt, next_sqrt)
break
j += 1
i = j
else:
i += 1
return total_distance
# 测试样例
print(sum_of_distances([1, 2, 3, 4, 5, 6, 7, 8, 9])) # 4
print(sum_of_distances([16, 17, 18, 19, 20, 21, 22, 23, 24, 25])) # 9
print(sum_of_distances([1, 4, 9, 16, 25])) # 0
print(sum_of_distances([1, 1, 1, 1])) # 0