1)题目:
力扣1414. 和为 K 的最少斐波那契数字数目https://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)结果: