779 香槟塔
注意点: 下标都是从0开始的。
第一行: row=0。将所有的酒都倒入第一个杯子;
第二行: row=1。用第一行的酒-1,然后分别倒入第二行的两个杯子;
第三行: row=2。第二行有两个杯子,把第一个杯子的酒分别倒入第三行的0、1两个杯子中,第二个杯子分别倒入第三行的1、2两个杯子中。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public double champagneTower(int poured, int query_row, int query_glass) { double[] row = {poured}; for (int i = 1; i <= query_row; i++) { double[] nextRow = new double[1+i]; for (int j = 0; j < i; j ++) { double v = row[j]; if (v > 1){ nextRow[j] += (v - 1) / 2; nextRow[j+1] += (v - 1) / 2; } } row = nextRow; } return Math.min(1, row[query_glass]); }
|