classSolution{public:
vector<int>productExceptSelf(vector<int>& nums){int numsLength = nums.size();// left 和 right 分别表示左右两侧的乘积列表
vector<int>left(numsLength,1),right(numsLength,1);// 记录结果
vector<int>answer(numsLength);// left[i] 表示索引i左侧的所有元素的乘积, 对于索引为 '0' 的元素,其左侧没有元素,所以 left[0] = 1for(int i =1; i < numsLength; i++){
left[i]= left[i-1]* nums[i-1];}// right[i] 表示索引i右侧所有元素的乘积,对于索引为 'numsLength -1' 的元素,其右侧没有元素,所以 R[numsLength -1] = 1for(int i = numsLength-2; i >=0; i--){
right[i]= nums[i+1]* right[i+1];}// 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积for(int i =0; i < numsLength; i++){
answer[i]= left[i]* right[i];}return answer;}};
方法二
classSolution{public:
vector<int>productExceptSelf(vector<int>& nums){int numsLength = nums.size();
vector<int>answer(numsLength,1);for(int i =1; i < numsLength; i++){
answer[i]= answer[i-1]* nums[i-1];}// 动态构造 R ,跟踪右边元素的乘积int r =1;for(int i = numsLength-1; i >=0; i--){
answer[i]= answer[i]* r;
r = r * nums[i];}return answer;}};