描述
你將獲得 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
提示:
1.1 <= K <= 100
2.1 <= N <= 10000
代碼
/**
* @param {number} K
* @param {number} N
* @return {number}
*/
var superEggDrop = function (K, N) {
let dp = Array(K + 1).fill(0)
let cnt = 0
while (dp[K] < N) {
cnt++
for (let i = K; i > 0; i--) {
dp[i] = dp[i - 1] + dp[i] + 1
}
}
return cnt
};