0
点赞
收藏
分享

微信扫一扫

leetcode算法题--和为 K 的最少斐波那契数字数目

心存浪漫 2022-02-03 阅读 59

原题链接:https://leetcode-cn.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/

有三个可证明结论:

  1. 比k小的那个数肯定被选中
  2. 两个相邻的数肯定不会被选中
  3. 存在一种最少的方案不会选择重复的数
class Solution {
public:
    int findMinFibonacciNumbers(int k) {
        // 获得数组
        vector<int> vec;
        vec.emplace_back(1);
        int a = 1, b = 1;
        while (a + b <= k) {
            int c = a + b;
            vec.emplace_back(c);
            a = b;
            b = c;
        }
        // 查出和
        int res = 0;
        for (int i = vec.size() - 1; i >= 0 && k > 0; --i) {
            if (k >= vec[i]) {
                k -= vec[i];
                res++;
            }
        }
        return res;
    }
};
举报

相关推荐

0 条评论