class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int s = nums.size();
vector<int> l;
vector<int> r;
r.push_back(nums[s - 1]);
l.push_back(nums[0]);
for (int i = 1; i < s; i++) {
l.push_back(nums[i] * l[i - 1]);
r.push_back(nums[s - 1 - i] * r[i - 1]);
}
for (int i = 0; i < s; i++) {
if (i == 0)
nums[i] = r[s - 2];
else if (i == s - 1)
nums[i] = l[s - 2];
else
nums[i] = l[i - 1] * r[s - 2 - i];
}
return nums;
}
};
乍一看可能先想到除法,但是如果存在0元素处理不了,而且题目不允许
谜底就在谜面上 "题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。" "前缀"" 后缀"
建数组存每个位置前缀或后缀的乘积,然后对应位置相乘即可