除自身之外的乘积,即可以将数组内所有元素相乘得到s,然后遍历到当前元素时,使用所有元素的乘积s/当前元素即可。
1. 首先获得数组中所有元素的乘积s,并记录数组中0的个数
2. 我们进入计算结果集,分为以下三种情况
(1)如果数组中含有两个0,那么整个结果集必然为0,因为你无论撇弃那个元素最终的乘积都为0。
(2)如果数组中含有一个0,那么结果集中除了当前位置,其余位置都为0,我们只需判断当前位置是否为0,不为零将s给它,否则就给0
(3)如果数组中没有0,那么我们只需进行赋值nums[i] = s/nums[i]即可
(4)最后返回nums[i]
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> ans;
int s = 1;
int flag = 0; // 标记0的个数
// 计算整个数组的乘积,如果是0,不参与运算,如果数组中超过两个零的整个数组皆为0
for(auto n:nums){
if(n!=0){
s*=n;
}else{
flag++;
}
if(flag>1){
s = 0;
break;
}
}
for(int i=0;i<nums.size();i++){
if(flag>=2){ // 如果含有两个0则整个结果集都为0
nums[i] = 0;
}else if(flag==1){ // 含有一个0的情况
if(nums[i]==0){
nums[i] = s;
}else{
nums[i] = 0;
}
}else{ // 没有0的情
int t = nums[i];
nums[i] = s/t;
}
}
return nums;
}
};