leetcode 238 除自身以外数组的乘积
一、题目描述
二、解题思路
(1)首先进行边界处理,如果数组为空,则返回空数组;
(2)变量mul用于计算除0以外所有数的乘积,count_zero用于记录数组中0的个数;
(3)填充ret向量:
如果nums[i]==0:
<1>count_zero==1,表示这个0为向量中唯一的0,所以ret[i]=mul;
<2>count_zero!=1,表示向量中还有其他的0,所以ret[i]=0;
如果nums[i]!=0:
<1>count_zero==0,表示向量中没有0,所以ret[i]=mul/nums[i];
<2>count_zero!=0,表示向量中有零,所以ret[i]=0;
三、代码实现
时间复杂度:T(n)=O(n)
空间复杂度:S(n)=O(1)
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {vector<int> ret(nums.size());//边界处理if(nums.empty()) return {};int count_zero=0;//记录0的个数int mul=1;for(int i=0;i!=nums.size();i++){if(nums[i]!=0) mul*=nums[i];else count_zero++;}for(int i=0;i!=ret.size();i++){if(nums[i]==0){if(count_zero==1) ret[i]=mul;else ret[i]=0;}else if(nums[i]!=0){if(count_zero==0) ret[i]=mul/nums[i];else ret[i]=0;}}return ret;}
};