题目:
Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
思路:
小小的数学问题。ret为返回的数组。如果nums存在两个0,则ret全部为0;如果nums存在1个0,假设nums[i]为0,则ret中除了ret[i]为非0外,其他都为0;如果nums不存在0,常规操作。
代码实现:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> ret(nums.size(), 0);
int product = 1;
int zero = 0;
for (int i = 0; i < nums.size(); ++i){
if (nums[i] == 0){
if (zero == 0){
++zero;
}else{
return ret;
}
}else{
product *= nums[i];
}
}
for (int i = 0; i < nums.size(); ++i){
if (zero == 1){
if (nums[i] == 0){
ret[i] = product;
}else{
ret[i] = 0;
}
}else{
ret[i] = product / nums[i];
}
}
return ret;
}
};
discuss:
/*
discuss评论区的例子:
Numbers: 2 3 4 5
Lefts: 1 2 2*3 2*3*4
Rights: 3*4*5 4*5 5 1
*/
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res(nums.size(), 1);
for (int i = 0, j = nums.size() - 1, tmp1 = 1, tmp2 = 1; i < nums.size(); ++i, --j){
res[i] *= tmp1, tmp1 *= nums[i];
res[j] *= tmp2, tmp2 *= nums[j];
}
return res;
}
};