[Codicioso] B_5373. La suma del número mínimo de números de Fibonacci de K (mesa de juego)

1. Título Descripción

Para darle el número k, devuelva el número mínimo de números de Fibonacci que son suma k, donde cada número de Fibonacci se puede usar varias veces.

Los números de Fibonacci se definen como:

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

Los datos garantizan que para un determinado k, se debe encontrar una solución factible.

Consejo: 1 <= k <= 10 ^ 9

输入:k = 7
输出:2 
解释:斐波那契数字为:1,1,2,3,5,8,13,……
对于 k = 7 ,我们可以得到 2 + 5 = 7 。

输入:k = 19
输出:3 
解释:对于 k = 19 ,我们可以得到 1 + 5 + 13 = 19 。

Método 1: codicia

Se usa el menor número requerido, lo que significa que solo podemos usar primero un número relativamente grande cercano a k. Mi enfoque es preprocesar el fab primero, y luego enumerar de atrás hacia adelante, tratar de usar números grandes.

public int findMinFibonacciNumbers(int k) {
    List<Integer> fab = new ArrayList<>();
    fab.add(1);
    fab.add(1);
    while (fab.get(fab.size()-1) < k) {
        int t = fab.get(fab.size()-1) + fab.get(fab.size()-2); 
        fab.add(t);
    }
    int cnt = 0;
    for (int i = fab.size()-1; i >= 0; i--) {
        while (k >= fab.get(i)) {
            k -= fab.get(i);
            cnt++;
        } 
    }
    return cnt;
}

Análisis de complejidad.

  • Complejidad del tiempo: El ( norte ) O (n)
  • Complejidad espacial: El ( norte ) O (n)
Publicado 714 artículos originales · elogiado 199 · 50,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43539599/article/details/105615536
Recomendado
Clasificación