目录

leetcode每日一题——和为K的最少斐波那契数字数目


题目

题目链接

https://s2.loli.net/2022/02/03/s7eCY4IaMTGPB1H.png

题目详解

我开始是想着构造好fib数组的值,然后用背包问题去解决它。可惜,直接超时了!

后面直接用最简单的贪心方式没想到真的可行。。

然后看了题解才知道原来fib的「每次选择不超过当前 k 的最大数」这是一个特有的结论,然后大家都在证明他,虽然我看不懂,但我大受震撼😂

详解链接

解题代码

class Solution {
public:
    int findMinFibonacciNumbers(int k) {
        vector<int>items(2,1);
        int ret = 0;
        while(items.back()<k){
            items.push_back(items.back()+items[items.size()-2]);
        }
        for(int i=items.size()-1;i>=0;i--){
            ret += k/items[i];
            k %= items[i];
        }
        return ret;
    }
};