package LeetCode.OneToFiveHundred;
public class TwoHundredAndThirtyEight {
public int[] productExceptSelf(int[] nums) {
// 我们可以记录每个下标的左右的值,然后计算每个下标左右值相乘即可
int len = nums.length;
// 我们用answer记录左边的值相乘的结果
int[] answer = new int[len];
answer[0] = 1; // 下标为 0 时左边没有数字,任何数乘 1 都是 1,所以将初始值设置为1,下同
// 用right 记录右边的值相乘的结果
int[] right = new int[len];
right[len - 1] = 1;
// 记录下标左边的所有数相乘,即就是answer的上一个下标乘nums的相同下标
for(int i = 1; i < len; i ++)
answer[i] = nums[i - 1] * answer[i - 1];
// 原理同上
for (int i = len - 2; i >= 0; i--)
right[i] = nums[i + 1] * right[i + 1];
// 计算下标的左边乘积乘右边乘积
for (int i = 0; i < len; i++)
answer[i] = answer[i] * right[i];
return answer;
}
}