题目来源:https://leetcode-cn.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/
大致题意:
给一个整数 k,求出最少使用多少个斐波那契数列的元素可以组成 k
思路
若想使用最少的元素组成,那么每次选用的数列元素就应该是满足要求的最大元素
- 于是可以每次将当前数 k 减去不大于 k 的最大的斐波那契数列元素
代码:
public int findMinFibonacciNumbers(int k) {
int[] f = new int[100];
int len = 2;
f[0] = 0;
f[1] = 1;
f[2] = 1;
// 计算出不大于 k 的斐波那契数列
while (f[len] <= k) {
len++;
f[len] = f[len - 1] + f[len - 2];
}
int ans = 0;
// 求出需要的数列元素个数
while (k != 0 && len > 0) {
if (k >= f[len]) {
k -= f[len];
ans++;
}
len--;
}
return ans;
}