LeetCode每日一题: 1414. 和为 K 的最少斐波那契数字数目, 贪心

142 阅读1分钟

PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛

image.png

class Solution {
    public int findMinFibonacciNumbers(int k) {
        List<Integer> fibList = new ArrayList<>();
        fibList.add(1);
        fibList.add(1);
        int a = 1, b = 1;
        while (b <= k) {
            int c = a + b;
            a = b;
            b = c;
            fibList.add(c);
        }
        int ans = 0;
        // 查找几个数组成k
        for (int i = fibList.size() - 1; i >= 0; i--) {
            if (fibList.get(i) <= k) {
                k -= fibList.get(i);
                ans++;
            }
        }
        return ans;
    }
}

思路: 贪心算法

先将数列创建出来, 然后假定有最优解, 从后向前遍历, 如果 数列的值 <= k, k = k - 数列的值 然后ans加一, 最后得出解为ans.