Java 我正试图解决这个leetcode问题
问题: 给定数字k,返回其和等于k的Fibonacci数的最小数目,以及Fibonacci数是否可以多次使用 斐波那契数定义为:Java 我正试图解决这个leetcode问题,java,fibonacci,c,c++,c#,python,javascript,go,rust,Java,Fibonacci,C,C++,C#,Python,Javascript,Go,Rust,问题: 给定数字k,返回其和等于k的Fibonacci数的最小数目,以及Fibonacci数是否可以多次使用 斐波那契数定义为: F1 = 1 F2 = 1 Fn = Fn-1 + Fn-2 , for n > 2. 可以保证,对于给定的约束,我们总是可以找到这样的斐波那契数,求和k 问题链接: 例如: 输入:k=7 产出:2 说明:斐波那契数是:1,1,2,3,5,8,13。。。 对于k=7,我们可以使用2+5=7 class Solution { publ
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 , for n > 2.
可以保证,对于给定的约束,我们总是可以找到这样的斐波那契数,求和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;
}
}
类解决方案{
公共整数findMinficNumber(整数计数){
PriorityQueue num=新的PriorityQueue(Collections.reverseOrder());
inti1=1,i2=1;
num.add(i1);
num.add(i2);
int k=计数;
int i3=0;
k=k-2;
int res=0;
而(k>=1){
i3=i2+i1;
num.add(i3);
内部温度=i2;
i2=i3;
i1=温度;
k--;
}
while(计数!=0){
int n=num.poll();
如果(n您可以简单地使用递归来解决这个问题
这将通过:
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);
}
}
类解决方案{
公共int FINDMINFIN数字(int k){
if(k<2)
返回k;
int first=1;
int秒=1;
while(second)请阅读:您正在轮询队列,从队列中删除元素,但您可能想使用peek
一些简单的打印语句调试应该会显示问题。调试器可能更容易。