這道題看提示說不要用除法,我心裏一想,爲啥會用到除法?原來可以將所有數組裏的元素全都乘起來,然後除去每個遍歷的元素。。。但是此法禁止用啊~
看了一下,用左右乘積這個方法來求很巧妙。
具體就是設置一個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;
}
};