解法一:(左右乘积列表)利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。
java
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] L = new int[len]; // 存放i左边的乘积
int[] R = new int[len]; // 存放i右边的乘积
int[] result = new int[len];
// 第1个元素左边没有数据,乘积为0
L[0]=1;
for(int i=1;i<len;i++){
L[i]=L[i-1]*nums[i-1];
}
// 第len个元素右边没有数据,乘积为0
R[len-1]=1;
for(int i=len-2;i>=0;i--){
R[i]=R[i+1]*nums[i+1];
}
// 计算
for(int i=0;i<len;i++){
result[i]=L[i]*R[i];
}
return result;
}
}
注意:
- 左乘积数组:第1个元素左边没有数据,乘积为0
- 右乘积数组:第len个元素右边没有数据,乘积为0