zoukankan      html  css  js  c++  java
  • leetcode 鸡蛋掉落 java

    题目:

    你将获得 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

    思路:

    class Solution {
        public int superEggDrop(int eggNum, int floorNum) {
            // eggNum表示鸡蛋数,floorNum表示楼层数
            if (eggNum == 0)
                return 0;
            if (eggNum == 1)
                return floorNum;
            //dp[i][j] 表示i个鸡蛋在j步内最多能测出的层数
            int[][] dp = new int[floorNum + 1][eggNum + 1];
            dp[0][0] = 0;
            for (int i = 1; i <= floorNum; ++i) {
                dp[i][0] = 0;
                for (int j = 1; j <= eggNum; ++j) {
                    //鸡蛋碎 鸡蛋不碎
                    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] + 1;
                    if (dp[i][j] >= floorNum) 
                        return i;
                }
            }
            return floorNum;
        }
    }
  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10935440.html
Copyright © 2011-2022 走看看