题目
题解
- 用除法
考虑除0问题以及多个0的问题 - 除自身以外数组的乘积=左边的积*右边的积
先把对应的左边的积和右边的积分别存在两个数组中,直接取用即可
为了减小空间复杂度,直接用结果数组存储左边的积,右边的积在计算结果的过程中直接乘上去
代码
// class Solution {
// public:
// vector<int> productExceptSelf(vector<int>& nums) {
// vector<int> res(nums.size());
// int ans=1;
// int flag=0;
// for(int x:nums){
// if(x==0){
// flag++;
// continue;
// }
// ans=ans*x;
// }
// for(int i=0;i<nums.size();i++){
// if(flag>1)
// return res;
// if(flag!=0&&nums[i]!=0)
// res[i]=0;
// else if(flag!=0&&nums[i]==0)
// res[i]=ans;
// else if(flag==0)
// res[i]=ans/nums[i];
// }
// return res;
// }
// };
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res(nums.size());
res[0]=1;
for(int i=1;i<nums.size();i++)
res[i]=res[i-1]*nums[i-1];
int ans=1;
for(int i=nums.size()-1;i>=0;i--){
res[i]=res[i]*ans;
ans=ans*nums[i];
}
return res;
}
};