LeetCode: 238. Product of Array Except Self
题目描述
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]
.
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Note: Please solve it without division and in O(n)
.
Follow up:
- Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)
解题思路
- 如果数组中没有
0
,则计算数组中所有数的乘积 P
。除去第 i
位元素的乘积位 P/nums[i]
- 如果数组中有一个
0
,则单独计算除开这一位的乘积。而其他位的 Product of Array Except Self 都为 0
- 如果数组中有两个及以上的
0
,Product of Array Except Self 都为 0
AC 代码
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> products;
long long int total_product = 1;
int zero_count = 0;
for(auto iter = nums.begin(); iter != nums.end(); ++iter)
{
if(*iter == 0)
{
++zero_count;
}
else
{
total_product *= (*iter);
}
}
for(auto iter = nums.begin(); iter != nums.end(); ++iter)
{
if(zero_count == 0)
{
products.push_back(total_product/(*iter));
}
else if(zero_count == 1 && *iter == 0)
{
products.push_back(total_product);
}
else
{
products.push_back(0);
}
}
return products;
}
};