public int findMinFibonacciNumbers(int k) {
List<Integer> f = new ArrayList<Integer>();
f.add(1);//从第二个数开始记录斐波那契数列
int a = 1, b = 1;
//直到最大不超过k的数出现
while (a + b <= k) {
int c = a + b;
f.add(c);
a = b;
b = c;
}
int ans = 0;
//倒序查找最大不超过k的数,k减去该数,次数加1
for (int i = f.size() - 1; i >= 0 && k > 0; i--) {
int num = f.get(i);
if (k >= num) {
k -= num;
ans++;
}
}
return ans;
}