1、模拟过程
我们可以模拟香槟塔中每一层内液体流动的过程。我们首先使用数组row记录当前层内每个被子中的液体体积,而后根据其体积是否大于1判断他会影响下一层中的哪些杯子中的体积,当本层所有杯子都循环结束之后,我们将下一层杯子中液体体积的数组赋给本层并继续循环直至抵达目标层数,我们将对应杯子中的体积换算成比例即可。
class Solution {
public:
double champagneTower(int poured, int query_row, int query_glass) {
vector<double> row = {(double)poured};
for (int i = 1; i <= query_row; i++) {
vector<double> nextRow(i + 1, 0.0);
for (int j = 0; j < row.size(); j++) {
double volume = row[j];
if (volume > 1) {
nextRow[j] += (volume - 1) / 2;
nextRow[j + 1] += (volume - 1) / 2;
}
}
row = nextRow;
}
return min(1.0, row[query_glass]);
}
};