你將獲得 K 個雞蛋,並可以使用一棟從 1 到 N 共有 N 層樓的建築。
每個蛋的功能都是一樣的,如果一個蛋碎了,你就不能再把它掉下去。
你知道存在樓層 F ,滿足 0 <= F <= N 任何從高於 F 的樓層落下的雞蛋都會碎,從 F 樓層或比它低的樓層落下的雞蛋都不會破。
每次移動,你可以取一個雞蛋(如果你有完整的雞蛋)並把它從任一樓層 X 扔下(滿足 1 <= X <= N)。
你的目標是確切地知道 F 的值是多少。
無論 F 的初始值如何,你確定 F 的值的最小移動次數是多少?
示例 1:
輸入:K = 1, N = 2
輸出:2
解釋:
雞蛋從 1 樓掉落。如果它碎了,我們肯定知道 F = 0 。
否則,雞蛋從 2 樓掉落。如果它碎了,我們肯定知道 F = 1 。
如果它沒碎,那麼我們肯定知道 F = 2 。
因此,在最壞的情況下我們需要移動 2 次以確定 F 是多少。
示例 2:
輸入:K = 2, N = 6
輸出:3
示例 3:
輸入:K = 3, N = 14
輸出:4
class Solution {
int cumulative(int L, int K)
{
int i;
int N_t = 0;
if (K == 1) {
return L - 1;
}
for (i = 1; i < L; i ++) {
N_t += cumulative(i, K - 1) + 1;
}
return N_t;
}
public int superEggDrop(int K, int N) {
double t;
int ret = 2, i;
int N_t = 0;
if (K == 1) {
return N;
}
while(true) {
for (i = 1; i < ret; i ++) {
N_t += cumulative(i, K - 1) + 1;
}
if (N_t >= N) {
return --ret;
} else {
N_t = 0;
ret ++;
}
}
}
}
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/super-egg-drop
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。