leetcode - 1414. 和为 K 的最少斐波那契数字数目
题目:
代码:
#include <iostream>
#include <vector>
using namespace std;
//贪心,找不大于k的最大斐波那契数列,直至k=0
int findMinFibonacciNumbers(int k) {
vector<int> f;
f.push_back(1); //f[0] = f[1]
f.push_back(1); //f[1] = f[2]
int f1 = 1, f2 = 1, f3;
//找到所有不大于k的斐波那契数列
while(f1 + f2 <= k){
f3 = f1 + f2;
f.push_back(f3);
f1 = f2;
f2 = f3;
}
int ans = 0;
for(int i = f.size() - 1; i >= 0 && k > 0; i--){
if(k - f[i] >= 0){
k -= f[i];
ans++;
}
}
return ans;
}
int main(){
int k, res;
cin>>k;
res = findMinFibonacciNumbers(k);
cout<<res;
return 0;
}