菜鸟心得-鸡蛋掉落-官方题解理解【3】

144 阅读1分钟

扔鸡蛋

思路: 我们使用最小次数,所能到达的最大层数。 如果层数超过当前的层数,记录最小的次数t.

/**
 * 
 * 描述:
 *     
 * 思路:
 *     随着次数增加,所能到达的最大楼层。
 * 
 * 规划:
 *  碎了:1 + dp(t - 1, k - 1)
 *  没碎:dp(t-1, k)
 * 
 *  dp = (
 *      1 + dp(t - 1, k - 1) + dp(t-1, k)
 *   )
 *  
 */
function dpFloor(n, kk) {
    // 初始化
    const dp = new Array(n + 1).fill(0).map(() => new Array(kk + 1).fill(0));  
    
    // dp
    for (let t = 1; t <= n; t++) {
        for (let k = 1; k <= kk; k++) {
            if (k === 1) {
                dp[t][k] = t;
            } else {
                dp[t][k] = 1 + dp[t-1][k-1] + dp[t-1][k];
            }
            // 最小的t,使得楼层超过
            if (dp[t][k] >= n) {
                return t;
            }
        }        
    }

    return n;
}

// -----> 测试用例 
const result = dpFloor(100,2);
console.log('========result=========', result);