题目地址
解题思路
涉及到斐波那契数字的选择:
1.斐波那契数字是非递减序列
2.斐波那契数字是非重复序列
所以我们采用贪心的思想,如果要寻找K的最少的斐波那契数字数目,我们可以找比K小的最大斐波那契数字,进而重复上述操作。
所以首先,我们要利用一个vector来保存小于等于K的斐波那契数字,利用这个数组,我们来进行上述操作。
具体代码实现看下面:一看就懂。
代码实现(C++)
class Solution {
public:
int findMinFibonacciNumbers(int k)
{
vector<int> fb;
fb.push_back(1);
int a=1,b=1;
while(a+b<=k)
{
int c=a+b;
fb.push_back(c);
a=b;
b=c;
}
int count=0;
int sum=0;
for(int i=fb.size()-1;i>=0&&k>0;i--)
{
if(k>=fb[i])
{
count++;
k=k-fb[i];
}
}
return count;
}
};