首页 > 其他 > 详细

LC 1414. Find the Minimum Number of Fibonacci Numbers Whose Sum Is K

时间:2020-04-19 17:38:30      阅读:62      评论:0      收藏:0      [点我收藏+]

link

技术分享图片

 

 

class Solution {
public:
    int findMinFibonacciNumbers(int k) {
        vector<int> fibo;
        fibo.push_back(1);
        fibo.push_back(1);
        while(true){
            int i=fibo[fibo.size()-1]+fibo[fibo.size()-2];
            if(i>k) break;
            fibo.push_back(i);
        }
        int res=0;
        while(k>0){
            res++;
            int cur=search(k,fibo);
            k-=fibo[cur];
        }
        return res;
    }
    
    int search(int sum, vector<int>& fibo){
        int left=0;
        int right=fibo.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(fibo[mid]<=sum) left=mid+1;
            else right=mid-1;
        }
        return right;
    }
};

证明:

https://proofwiki.org/wiki/Zeckendorf%27s_Theorem

https://proofwiki.org/wiki/Sum_of_Non-Consecutive_Fibonacci_Numbers

LC 1414. Find the Minimum Number of Fibonacci Numbers Whose Sum Is K

原文:https://www.cnblogs.com/FEIIEF/p/12732432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!