思考:
他让计算两侧的乘积和,本来可以通过计算总乘积,除以当前位来计算,但是他说了不让使用除法,可以使用两个数组,分别存储从左侧向右的乘积,一个保存从右侧向左的乘积。每次拿出来使用就可以了。
代码:
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
vector<int> front, rear, answer;
if (a.size() == 0) {
return answer;
}
if (a.size() == 1) {
answer.push_back(1);
return answer;
}
for (int i = 0; i < a.size() - 1; ++i) {
if (i == 0) {
front.push_back(a[0]);
rear.push_back(a[a.size() - 1]);
} else {
front.push_back(a[i] * front[i - 1]);
rear.push_back(a[a.size() - 1 - i] * rear[i - 1]);
}
}
for (int i = 0; i < a.size(); ++i) {
if (i == 0) {
answer.push_back(rear[a.size() - 2]);
} else if (i == a.size() - 1) {
answer.push_back(front[a.size() - 2]);
} else {
answer.push_back(front[i - 1] * rear[a.size() - 2 - i]);
}
}
return answer;
}
};