2022-2-3 T.1414 和为 K 的最少斐波那契数列
题目描述:
给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。 斐波那契数字定义为: F1 = 1 F2 = 1 Fn = Fn-1 + Fn-2 , 其中 n > 2 。 数据保证对于给定的 k ,一定能找到可行解。
示例:
输入:k = 7 输出:2 解释:斐波那契数字为:1,1,2,3,5,8,13,…… 对于 k = 7 ,我们可以得到 2 + 5 = 7 。
思路:
使用vector存储斐波那契数列。贪心不断判断是否可以继续减下去。不断维护更新被减数。
代码:
class Solution { public: int findMinFibonacciNumbers(int k) { vector<int> nums(2, 1); int n = 2, ans = 0; while(nums.back() <= k){ nums.push_back(nums[n - 2] + nums[n - 1]); n++; } for(int i = n - 1; i >= 0; i--){ if(nums[i] <= k){ ans++; k -= nums[i]; } } return ans; } };