这道题目我又想复杂了,解法其实非常直接,就是把边界判断一下。因为有时候有的剩余次数明显是不够的,而有的时候又是多余的。边界控制好之后,只需要按照均值平均一下,然后把剩下的数分配一下就可以了。
代码如下:
const missingRolls = (rolls, mean, n) => {
const total = mean * (n + rolls.length);
const currSum = rolls.reduce((p, n) => p + n, 0);
const diff = total - currSum;
if (currSum > total || diff > n * 6 || diff < n) {
return [];
}
const avg = Math.floor(diff / n);
const res = Array(n).fill(avg);
let lack = diff - avg * n;
for (let i = 0; i < res.length; i++) {
if (lack === 0) {
break;
}
const curr = res[i];
const maxConsume = Math.min(6 - curr, lack);
res[i] += maxConsume;
lack -= maxConsume;
}
return res;
};