这题的思路并不复杂,首先我们先列出两个小学生就可以列出的式子:
(tmp + X) / (rolls.size() + n) = mean;
X = (mean * (rolls.size() + n)) - tmp;
这里解释一下,tmp
是题目所给出的数组的所有数之和,第一个式子的X
也就是我们需要求出的数组的所有数之和,第一个式子就是求出题目所给平均值的式子,第二个式子也就是如何求出X
的式子了。在得到所求数组的所有数之和后,通过判断该数在除以n
后是否有余,来确认是否需要后续加一的操作,还需要判断得到的数是否处于1 ~ 6的合理范围内。至于加一的操作,其实就是将余数分为多个1,依次加到所求的数组上,当然,加上后仍需要满足数字处于1 ~ 6的合理区间内。思路有了,动手写代码,AC代码如下:
class Solution {
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
vector<int> ans;
int num = rolls.size();
int tmp = 0;
for(int i=0;i<num;i++) {
tmp += rolls[i];
}
int X = (mean * (num + n)) - tmp;
int x = X / n;
if(X%n == 0) {
if(x>=1 && x <= 6) {
for(int i=0;i<n;i++) {
ans.push_back(x);
}
}
}else {
if(x>=1 && x < 6) {
if(n == 1) {
ans.push_back(x);
return ans;
}
for(int i=0;i<n;i++) {
ans.push_back(x);
}
for(int i=0;i<(X%n);i++) {
ans[i]++;
}
}
}
return ans;
}
};