【问题标题】:I am trying to solve this leetcode problem [closed]我正在尝试解决这个 leetcode 问题 [关闭]
【发布时间】:2025-12-29 15:25:16
【问题描述】:

问题:

给定数字k,返回总和等于k的斐波那契数的最小个数,是否可以多次使用斐波那契数。

斐波那契数定义为:

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

保证对于给定的约束,我们总能找到和 k 相加的斐波那契数。

问题链接:

https://leetcode.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/

示例: 输入:k = 7 输出:2 说明:斐波那契数是:1, 1, 2, 3, 5, 8, 13, ... 对于 k = 7,我们可以使用 2 + 5 = 7。


    class Solution {
        public int findMinFibonacciNumbers(int count) {
            PriorityQueue<Integer> num=new PriorityQueue<>(Collections.reverseOrder());
          
            int i1=1,i2=1;
            num.add(i1);
            num.add(i2);
            int k=count;
            int i3=0;
            k=k-2;
            int res=0;
            while(k>=1){
                i3=i2+i1;
                num.add(i3);
                int temp=i2;
                i2=i3;
                i1=temp;
                k--;
            }
            while(count!=0){
                int n=num.poll();
                if(n<=count)
                {      res++;
                       count-=n;
                }
            }
            return res;
            
        }
    }

它显示“input=3”的输出错误。我生成了斐波那契数列并从最高数遍历以找到小于或等于总和的数。如果有人帮助我,那将非常有帮助。 提前谢谢你。

【问题讨论】:

标签: java fibonacci


【解决方案1】:

你可以简单地使用递归来解决这个问题。

这会通过:

class Solution {
    public int findMinFibonacciNumbers(int k) {
        if (k < 2)
            return k;

        int first = 1;
        int second = 1;

        while (second <= k) {
            second += first;
            first = second - first;
        }

        return 1 + findMinFibonacciNumbers(k - first);
    }
}

参考

  • 有关其他详细信息,您可以查看Discussion Board。有很多公认的解决方案,有各种languages 和解释、高效的算法,以及渐近的time/space 复杂性分析1, 2

如果你正在准备interviews

  • 我们希望根据标准和约定编写 bug-freeclean 代码(例如,12@987654334 @、212121111)。总体而言,我们希望避免任何可能在采访中引起争议的事情。

  • 还有其他类似的platforms,您可能需要熟悉它们,以防您要采访将使用这些平台的特定公司。

如果你正在练习contests1

  • 尽可能快地编写代码,几乎所有其他事情都非常琐碎。

  • 对于easy 的问题,蛮力算法通常会被接受。对于面试来说,蛮力是不太需要的,特别是如果问题是easy 级别。

  • 对于 mediumhard 问题,大约 90% 的情况下,蛮力算法大多会因 Time Limit Exceeded (TLE) 而失败,而较少出现内存限制超出 (MLE) 错误。

  • 根据here 解释的算法对参赛者进行排名。

【讨论】:

    最近更新 更多