0799. 香槟塔
题目地址(799. 香槟塔)
https://leetcode-cn.com/problems/champagne-tower/
题目描述
前置知识
动态规划
杨辉三角
公司
暂无
思路
这道题和杨辉三角问题类似,实现的基本思路都是从上到下模拟。如果大家对杨辉三角问题不熟悉,建议先看下杨辉三角。杨辉三角也是动态规划中很经典的问题。
由题目可知杯子的数目是第一行一个,第二行两个。。。第 i 行 i 个 (i >= 1)。因此建立一个二维数组即可。为了简单,我们可以建立一个大小为 R _ R 的二维矩阵 A ,其中 R 为香槟塔的高度。虽然这样的建立方式会造成一半的空间浪费。但是题目的条件是** query_glass 和 query_row 的范围 [0, 99]**,因此即便如此问题也不大。当然你也可以直接开辟一个 100 _ 100 的矩阵。
接下来,我们只需要按照题目描述进行模拟即可。具体来说:
先将第一行第一列的杯子注满香槟。即 A[0][0] = poured
接下来从上到下,从左到右进行模拟。
模拟的过程就是
计算溢出的容量
将溢出的容量平分到下一层的两个酒杯中。(只需要平分到下一层即可,不用关心下一层满之后的溢出问题,因为之后会考虑,下面的代码也会体现这一点)
关键点
不必模拟多步,而是只模拟一次即可
代码
语言支持:Python3
Python3 Code:
复杂度分析
时间复杂度:$O(R^2)$
空间复杂度:$O(R^2)$
此题解由 力扣刷题插件 自动生成。
力扣的小伙伴可以关注我,这样就会第一时间收到我的动态啦~
以上就是本文的全部内容了。大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
最后更新于