給你數字 k ,請你返回和為 k 的斐波那契數字的最少數目,其中,每個斐波那契數字都可以被使用多次。
斐波那契數字定義為:
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 , 其中 n > 2 。
數據保證對于給定的 k ,一定能找到可行解。
示例 1:
輸入:k = 7
輸出:2
解釋:斐波那契數字為:1,1,2,3,5,8,13,……
對于 k = 7 ,我們可以得到 2 + 5 = 7 。
代碼
class Solution {public int findMinFibonacciNumbers(int k) {LinkedList<Integer> list = new LinkedList<>();list.add(1);int a = 1, b = 1, c = 0,res=0;while (true) {//計算出小于k的數列c = a + b;a = b;b = c;if (c > k) break;list.add(c);}int i=list.size()-1;while (k > 0)//從右到左貪心{if(list.get(i)>k) {i--;continue;}k-=list.get(i);//減去已經找到了的數字,縮小規模res++;i--;}return res;}
}