给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n)
时间复杂度内完成此题。
示例 1:
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0]
思路:
定义r和l俩数组,r[i]表示nums数组中第i个元素之前的所有数的乘积,l[i]表示第i个元素之后的所有数的乘积,然后再用一个for循环,把r和l的数组元素对应相乘,就是符合条件的数组。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int len=nums.size();
vector<int> ans(len);
vector<int> r(len,0),l(len,0);
r[0]=1;
for(int i=1;i<len;i++)
{
r[i]=r[i-1]*nums[i-1];
}
l[len-1]=1;
for(int i=len-2;i>=0;i--)
{
l[i]=l[i+1]*nums[i+1];
}
for(int i=0;i<len;i++)
{
ans[i]=r[i]*l[i];
}
return ans;
}
};