LC 2952. 需要添加的硬币的最小数量
https://leetcode.cn/problems/minimum-number-of-coins-to-be-added/description/
题解 写的非常好,就是使用归纳法:
- 假设我们已经收集了 `[1, s)` ,然后遇到下一个元素是X
- 如果 `x > s` 的话,那么从 `[s, x)` 中间就会出现空档, 没有办法覆盖到。我们需要先收集 `s`
- 如果 `x <= s` 的话,那么没有问题,我们覆盖的范围就到了 `[1, s + x)`.
class Solution: def minimumAddedCoins(self, coins: List[int], target: int) -> int: coins.sort() ans, s, i = 0, 1, 0 while s <= target: if i < len(coins) and coins[i] <= s: s += coins[i] i += 1 else: s += s ans += 1 return ans