扔鸡蛋问题
这是一道非常经典的google面试题,在此记录一下。
具体案例引导可见:扔鸡蛋问题(四种解法)
思路
这里介绍动态规划的解法:
我们假设 $F(K,N)$ 表示有 $K$ 个鸡蛋、$N$ 层楼,测出其摔碎临界点所需的最少次数,那么有如下状态转移公式:
- $F(K, N-i)$ : 如果第一个鸡蛋在第 $i$ 层没有摔碎,那么我们还有 $K$ 个鸡蛋以及剩余 $N-i$ 个楼层测试
- $F(K-1, i-1)$ : 如果第一个鸡蛋在第 $i$ 层摔碎,那么我们还有 $K-1$ 个鸡蛋以及剩余 $i-1$ 个楼层测试
- 取两者最坏情况,再取所有情况中最小的值,表示最少测试次数。
代码
具体编程实现如下:
1 | class Solution: |
上述代码在leetcode上超时了,复制粘贴了官方的代码ac的。