法一:TLE
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res;
for(int i=0;i<nums.size();i++)
{
int flag = 0;
int sum = 1;
while(flag<nums.size())
{
if(flag == i)
{
sum*=1;
flag++;
continue;
}
sum*=nums[flag];
flag++;
}
res.push_back(sum);
}
return res;
}
法二:先计算左边的所有乘积,然后从后边遍历累乘
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res(nums.size(),1);
for(int i=1;i<nums.size();i++)
{
res[i] = res[i-1]*nums[i-1];
}
int tem = 1;
for(int i=nums.size()-1;i>=0;i--)
{
res[i] = res[i] * tem;
tem*=nums[i];
}
return res;
}
法三:同理法二,只是把左右两边的乘积分开来算
vector<int> productExceptSelf(vector<int>& nums)
{
vector<int> left(nums.size(),1);
vector<int> right(nums.size(),1);
vector<int> res(nums.size(),1);
for(int i=1;i<nums.size();i++)
{
left[i] = left[i-1] * nums[i-1];
}
for(int i=nums.size()-2;i>=0;i--)
{
right[i] = right[i+1] * nums[i+1];
}
for(int i=0;i<nums.size();i++)
{
res[i] = left[i]*right[i];
}
return res;
}