思路:
两次预处理,分别从头到尾和从尾到头记录从边界到该数前的乘积,最后左边乘积乘上右边乘积即为该数的答案。
class Solution {
public:
vector <long long >before;
vector <long long >after;
vector<int> productExceptSelf(vector<int>& nums) {
int l = nums.size();
for(int i = 0;i < l ; i++){
before.push_back(1);
after.push_back(1);
}
long long x = 1;
for(int i = 1; i < l; i++){
x *= nums[i-1];
before[i] = x;
}
x = 1;
for(int i = l - 2; i>= 0; i--){
x *= nums[i+1];
after[i] = x;
}
vector<int> an;
for(int i = 0; i < l; i++){
long long q = 1;
if(i != 0){
q *= before[i];
}
if(i != l-1){
q *= after[i];
}
an. push_back(q);
}
return an;
}
};