1. 程式人生 > 實用技巧 >LeetCode 1414. 和為K的最少斐波那契數字數目

LeetCode 1414. 和為K的最少斐波那契數字數目

題目描述連結: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; } };