📜  链表中不同奇数斐波那契节点的平均值(1)

📅  最后修改于: 2023-12-03 15:42:07.863000             🧑  作者: Mango

链表中不同奇数斐波那契节点的平均值

简介

本代码片段实现了一个函数,用于计算一个链表中所有不同的奇数斐波那契数的平均值。

函数接收一个链表的头结点作为参数,并返回计算得到的平均值。

本代码片段使用Python语言实现。

斐波那契数列

斐波那契数列是指:0、1、1、2、3、5、8、13、21、34……这样一个递推数列。

其中每一项都是由前两项之和得到:f(n) = f(n-1) + f(n-2),其中f(0) = 0,f(1) = 1。

奇数斐波那契数列

奇数斐波那契数列是斐波那契数列中所有奇数项的集合,即:1、1、3、5、13、21、……

计算流程
  1. 使用一个列表保存奇数斐波那契数列,初始化为[1, 1]
  2. 遍历链表中的每一个节点,若节点的值在奇数斐波那契数列中,则将该节点的值加到总和中,并更新出现次数
  3. 计算平均值并返回
代码
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def odd_fibonnaci_average(head: ListNode) -> float:
    odd_fib = [1, 1] # 奇数斐波那契数列
    ans = 0 # 总和
    count = 0 # 出现次数
    while odd_fib[-1] < 1000000: # 限定最大值
        odd_fib.append(odd_fib[-1] + odd_fib[-2])
    curr = head
    while curr:
        if curr.val in odd_fib:
            ans += curr.val
            count += 1
        curr = curr.next
    return ans / count if count else 0
使用说明

调用示例:

l = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, ListNode(6))))))
print(odd_fibonnaci_average(l)) # 3.0

输入为一个链表的头结点,输出为计算得到的平均值。

如果链表中不存在奇数斐波那契数,函数将返回0。