- left[i]表示原数组第i个元素以左(<i)的所有元素的累积
- right[i]表示原数组第i个元素以右(>i)的所有元素的累积
- 需要注意的是left数组的第一个元素和right数组的最后一个元素都是1
- 题目限定了输入范围因此不用特殊考虑输入校验问题
public class Solution {
public int[] multiply(int[] a) {
int[] left = new int[a.length];
int[] right = new int[a.length];
left[0] = 1;
right[a.length - 1] = 1;
for (int i = 1; i < a.length; i++) {
left[i] = left[i-1] * a[i-1];
}
for (int i = a.length -2; i >=0; i--) {
right[i] = right[i+1] * a[i+1];
}
int[] ret = new int[a.length];
for (int i = 0; i < a.length; i++) {
ret[i] = left[i] * right[i];
}
return ret;
}
}