这道题看提示说不要用除法,我心里一想,为啥会用到除法?原来可以将所有数组里的元素全都乘起来,然后除去每个遍历的元素。。。但是此法禁止用啊~
看了一下,用左右乘积这个方法来求很巧妙。
具体就是设置一个left用来保存当前扫描到元素左边所有元素的乘积,用right来保存当前扫描到元素右边所有元素的乘积。 然后一个循环之后,也就是经历了一个交叉后,将左右元素乘积都乘一起了 也就求解了~
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n=nums.size();
int left=1,right=1; //left:从左边累乘,right:从右边累乘
vector<int> res(n,1);
for(int i=0;i<n;++i) //最终每个元素其左右乘积进行相乘得出结果
{
res[i]*=left; //乘以其左边的乘积
left*=nums[i];
res[n-1-i]*=right; //乘以其右边的乘积
right*=nums[n-1-i];
}
return res;
}
};