本文主要是介绍Champagne Tower - leetcode 799,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目大意:金字塔形的杯子排列,由最上面的杯子开始灌水,水在灌满杯子后,溢出的水会均匀流到脚下的两个杯子中。给定灌水量和由i,j 确定的杯子的位置,求这个杯子的灌水量。
题目分析:给定了杯子的坐标,只要由上到下依次求出和这个杯子有关的杯子的灌水量即可,放在边缘的杯子只有一个水源,而放在里面的杯子有两个水源。
AC code:(Ruby)
def champagne_tower(poured, query_row, query_glass)poured, ri, rj = [poured.to_f, query_row, query_glass]cups = Array.new(ri + 1){Array.new(rj + 1, 0.0)}diff = ri - rjmax = ->(a, b){a > b ? a : b}min = ->(a, b){a < b ? a : b}get_from_upper = ->(p){max.(p - 1, 0) / 2}(0..ri).each {|i|if i <= diff then 0..min.(i, rj) else (i - diff)..min.(i, rj)end.each {|j|cups[i][j] =casewhen i == 0 && j == 0pouredwhen j == 0get_from_upper.(cups[i - 1][j])when j == iget_from_upper.(cups[i - 1][j - 1])elseget_from_upper.(cups[i - 1][j - 1]) + get_from_upper.(cups[i - 1][j])end}}min.(cups[ri][rj], 1.0)
end
这篇关于Champagne Tower - leetcode 799的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!