构建乘积数组:
构建左右乘积表:
- 左乘积表表示A中位置i以前的所有元素乘积。对于i=0,由于左侧无元素,设为1
- 右乘积表表示A中位置i以后的所有元素乘积。对于i=n-1,由于左侧无元素,设为1
最终结果为左右乘积表对应位置相乘即可
public int[] multiply(int[] A) { if (A == null || A.length <= 1) { return null; } int n = A.length; int[] B1 = new int[n]; B1[0] = 1; for (int i = 1; i < n; i++) { B1[i] = B1[i - 1] * A[i - 1]; } int[] B2 = new int[n]; B2[n - 1] = 1; for (int i = n - 2; i >= 0; i--) { B2[i] = A[i + 1] * B2[i + 1]; } int[] B = new int[n]; for (int i = 0; i < n; i++) { B[i] = B1[i] * B2[i]; } return B; }