PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛
class Solution {
public int findMinFibonacciNumbers(int k) {
List<Integer> fibList = new ArrayList<>();
fibList.add(1);
fibList.add(1);
int a = 1, b = 1;
while (b <= k) {
int c = a + b;
a = b;
b = c;
fibList.add(c);
}
int ans = 0;
// 查找几个数组成k
for (int i = fibList.size() - 1; i >= 0; i--) {
if (fibList.get(i) <= k) {
k -= fibList.get(i);
ans++;
}
}
return ans;
}
}
思路: 贪心算法
先将数列创建出来, 然后假定有最优解, 从后向前遍历, 如果 数列的值 <= k, k = k - 数列的值 然后ans加一, 最后得出解为ans.