找到 $10^{10}$ 以内的所有斐波那契数字,然后从最大的数字开始一一尝试即可。
FIBONACCI_NUMBERS = [
1,
2,
3,
5,
8,
13,
21,
34,
55,
89,
144,
233,
377,
610,
987,
1597,
2584,
4181,
6765,
10946,
17711,
28657,
46368,
75025,
121393,
196418,
317811,
514229,
832040,
1346269,
2178309,
3524578,
5702887,
9227465,
14930352,
24157817,
39088169,
63245986,
102334155,
165580141,
267914296,
433494437,
701408733,
1134903170
]
class Solution:
def findMinFibonacciNumbers(self, k: int) -> int:
cnt = 0
for num in FIBONACCI_NUMBERS[::-1]:
cnt += k // num
k %= num
return cnt