假设我们有一个数字k,那么无论斐波那契数是否可以多次使用,我们都必须找到总和等于k的最小斐波那契数。
因此,如果输入像k = 7,则输出将为2,因为斐波那契数为:1、1、2、3、5、8、13 ...对于k = 7,我们可以使用2 + 5 = 7。
为了解决这个问题,我们将遵循以下步骤-
定义一个数组f
在f的末尾插入0
在f的末尾插入1
当f <= k的最后一个元素时-
将(f的最后一个元素+ f的倒数第二个元素)插入f
ret:= 0
j:= f的最后一个索引
而(j> = 0并且k> 0),做-
(将j减1)
k:= k-f [j]
(增加ret 1)
如果f [j] <= k,则-
除此以外
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int findMinFibonacciNumbers(int k) { vector<int> f; f.push_back(0); f.push_back(1); while (f.back() <= k) { f.push_back(f[f.size() - 1] + f[f.size() - 2]); } int ret = 0; int j = f.size() - 1; while (j >= 0 && k > 0) { if (f[j] <= k) { k -= f[j]; ret++; } else j--; } return ret; } }; main(){ Solution ob; cout << (ob.findMinFibonacciNumbers(7)); }
7
输出结果
2