每日一题 0203
(2022.02.03)每日一题 和为k的最少斐波那契数字数目
今天是一道中等题,第一反应是枚举,然后找最大的比k小的值,然后一直减,直到0。
官方题解也是这个思路,没想到 最后写出来,代码也差不多。
class Solution {
public:
//递归fib写法
// int Fib(int k){
// if(k ==1 || k==2){
// return 1;
// }
// while(k != 2){
// return Fib(k-1) + Fib(k-2);
// }
// return 0;
// }
int findMinFibonacciNumbers(int k) {
//用于存储比k小的fib数列
vector<int> f;
int a = 1;
int b = 1;
int index = 0;
f.emplace_back(1);
while(a+b <= k){
int c = a+b;
f.emplace_back(c);
a = b;
b = c;
}
for(int i = f.size()-1; i>=0&&k>0; i--){
cout<<f[i]<<endl;
if(k >= f[i]){
k = k - f[i];
++index;
}
}
return index;
}
};

浙公网安备 33010602011771号