0
点赞
收藏
分享

微信扫一扫

每日一题Day<2022/2/9>

登高且赋 2022-02-09 阅读 46

1)题目:

力扣1414. 和为 K 的最少斐波那契数字数目icon-default.png?t=M0H8https://leetcode-cn.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/

2)代码:

class Solution666 {
public int findMinFibonacciNumbers(int k) {
int[] ints = new int[50]; //记录会使用的斐波那契数;
int i=2;
ints[0]=1;
ints[1]=1;
int counter=0; //记录结果
while (true){
ints[i]=ints[i-1]+ints[i-2]; //ints[i++]=ints[i-1]+ints[i-2];死循环
if (ints[i]>k)
break;
i++;
}
while (k!=0){
int temp=find(k,ints);
k-=temp;
counter++;
}
return counter;
}
//二分法查找最接近k且<=k的数。
public int find(int k,int []ints){
int left=0;
int right=ints.length-1;
while (left<right){
int mid=(left+right+1)/2;
if (ints[mid]<=k&&ints[mid]!=0) //由于数组存在大量0,ints[i]=0应属于大于k的部分。
left=mid;
else
right=mid-1;

}
return ints[left];
}

}

3)结果:

 

举报

相关推荐

0 条评论