题目:
题解:
代码如下:
class Solution {
public:
// 思路:贪心地选择不超过k的最大fib数字
int findMinFibonacciNumbers(int k) {
vector<int> f;
f.push_back(1);
// 在f中添加所有小于等于k的斐波那契数
for(int a=1,b=1,c;a+b<=k;a=b,b=c){
c=a+b;
f.push_back(c);
}
int res=0;
// 贪心地选取所有小于等于k的最大斐波那契数
for(int i=f.size()-1;i>=0&&k>0;i--){
int x=f[i];
if(k>=x)k-=x,res++;
}
return res;
}
};