从前处理一边,再从后处理一遍,从前处理的时候是从第一个数到当前所有数的积,从后处理的时候是从最后一个数到当前数的积。
当求第i个数的时候只需要讲从前处理到i-1的积乘于从后处理到i+1的积,即可得到需要求的。
1 class Solution { 2 public: 3 vector<int> productExceptSelf(vector<int>& nums) { 4 int n=nums.size(); 5 vector<int>left(n,1),right(n,1),result; 6 left[0]=nums[0]; 7 right[n-1]=nums[n-1]; 8 for(int i=1;i<n;i++) 9 left[i]=nums[i]*left[i-1]; 10 for(int i=n-2;i>=0;i--) 11 right[i]=nums[i]*right[i+1]; 12 result.push_back(right[1]); 13 for(int i=1;i<n-1;i++){ 14 int k=left[i-1]*right[i+1]; 15 result.push_back(k); 16 } 17 result.push_back(left[n-2]); 18 return result; 19 } 20 };