【貪心】B_5373. 和爲 K 的最少斐波那契數字數目(打表)

一、題目描述

給你數字 k ,請你返回和爲 k 的斐波那契數字的最少數目,其中,每個斐波那契數字都可以被使用多次。

斐波那契數字定義爲:

  • F1 = 1
    F2 = 1
    Fn = Fn-1 + Fn-2 , 其中 n > 2 。

數據保證對於給定的 k ,一定能找到可行解。

提示:1 <= k <= 10^9

輸入:k = 7
輸出:2 
解釋:斐波那契數字爲:1,1,2,3,5,8,13,……
對於 k = 7 ,我們可以得到 2 + 5 = 7 。

輸入:k = 19
輸出:3 
解釋:對於 k = 19 ,我們可以得到 1 + 5 + 13 = 19 。

方法一:貪心

要求使用的數字最少,意思就是讓我們只能先用相對較大且接近 k 的數。我的做法是先預處理 fab,然後從後往前枚舉,儘量使用大的數。

public int findMinFibonacciNumbers(int k) {
    List<Integer> fab = new ArrayList<>();
    fab.add(1);
    fab.add(1);
    while (fab.get(fab.size()-1) < k) {
        int t = fab.get(fab.size()-1) + fab.get(fab.size()-2); 
        fab.add(t);
    }
    int cnt = 0;
    for (int i = fab.size()-1; i >= 0; i--) {
        while (k >= fab.get(i)) {
            k -= fab.get(i);
            cnt++;
        } 
    }
    return cnt;
}

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(n)O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章