每日一题 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;
    }
};
posted @ 2022-02-03 20:02  kusola  阅读(35)  评论(0)    收藏  举报