【发布时间】: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”的输出错误。我生成了斐波那契数列并从最高数遍历以找到小于或等于总和的数。如果有人帮助我,那将非常有帮助。 提前谢谢你。
【问题讨论】:
-
你正在
poll队列,REMOVING 元素,但你可能想使用peek -
使用打印语句进行一些简单的调试应该可以显示问题所在。调试器可能更容易。