LeetCode 1414. 和為K的最少斐波那契數字數目
阿新 • • 發佈:2020-08-16
題目描述連結:https://leetcode-cn.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/
解題思路:基本演算法,貪心。此題要求返回和為k的最小斐波那契數字數目,且可以重複使用,所以只需選擇斐波那契數字中
小於k的最大數字,並用兩者的差值更新k,然後繼續迭代即可。
具體LeetCode C++求解如下:
class Solution { public: int findMinFibonacciNumbers(int k) { if(k==1||k==2||k==3){//前幾項在後面程式碼並不能找到F[i]>k,需特判。而k==4或5正好i可更新到5或6; return 1; } int F[1000]; F[1]=1; F[2]=1; int i; for(i=3;i<=k;i++){ F[i]=F[i-1]+F[i-2]; if(F[i]>k){ break; } } // printf("%d,%d",i,F[i]);//F[i-1]<=k,我們從大到小選擇和為k,可以保證最少 int times=0; for(int j=i-1;j>=1;j--){ if(k-F[j]<0){ continue; } else if(k-F[j]==0){ times++; return times; } else{while(k-F[j]>0){ k-=F[j]; times++; //printf("times=%d",times); } } } return times; } };