zoukankan      html  css  js  c++  java
  • 1414. Find the Minimum Number of Fibonacci Numbers Whose Sum Is K

    Given the number kreturn the minimum number of Fibonacci numbers whose sum is equal to k, whether a Fibonacci number could be used multiple times.

    The Fibonacci numbers are defined as:

    • F1 = 1
    • F2 = 1
    • Fn = Fn-1 + Fn-2 , for n > 2.

    It is guaranteed that for the given constraints we can always find such fibonacci numbers that sum k.

    给一个k,求问最少用多少个fibonacci数可以组成这个k。

    贪心来做,每次找到一个<=k的最大的fibonacci数,减去它继续这个过程,最后得到最小次数。

    1.f[i + 2] = f[i] + f[i + 1] 两个相邻的fibonacci肯定能用一个更大的来代替, 减少次数。

    2.f[i] * 2 = f[i - 2] + f[i + 1] 一个数的两倍可以等于换成一个大的一个小的之和,因此次数不变。

    3.f[0] + f[2] + ... + f[2n] = f[2n+1] - 1

    f[1] + f[3] + ... + f[2n-1] = f[2n] - 1 如果k>= f[2n] 又不选 f[2n]的话,那么其他的数的和会小于f[2n],那么你就需要额外多出元素来凑,同理f[2n+1]

    从这3条可以看出每次选<=k的最大的fibonacci数的正确的。

    class Solution(object):
        def findMinFibonacciNumbers(self, k):
            """
            :type k: int
            :rtype: int
            """
            f1 = f2 = 1
            while f2 <= k:
                f2,f1 = f2 + f1, f2
            ans = 0
            while f1 > 0:
                if k >= f2:
                    k -= f2
                    ans += 1
                f2, f1 = f1, f2 - f1
            return ans
  • 相关阅读:
    【CodeForces 788B】奇妙的一笔画问题
    数论day2——离散对数、元根
    学习阶段总结(1)
    Flask特殊装饰器
    Flask蓝图
    Flask对象配置
    Flask实例化配置
    Flask路由
    Flask Session
    Flask jinja2
  • 原文地址:https://www.cnblogs.com/whatyouthink/p/13360074.html
Copyright © 2011-2022 走看看