import java.util.ArrayList;
public class Solution {
// 方法一: 暴力双重循环---O(N^2)
public int[] multiply(int[] A) {
int[] B = new int[A.length];
for (int i = 0; i < A.length; i++) {
int temp = 1;
for (int j = 0; j < A.length; j++) {
if (j != i)
temp *= A[j];
}
B[i] = temp;
}
return B;
}
}
// 方法二: 分别计算B的以i为界限左右两侧,这样可以保存并使用上一次计算的B[i-1]的值,以此来降低时间复杂度
public int[] multiply(int[] A) {
int[] B = new int[A.length];
B[0] = 1;
for (int i = 1; i < A.length; i++) {
B[i] = B[i - 1] * A[i - 1];
}
int right = 1;
for (int i = A.length - 1; i >= 0; i--) {
B[i] *= right;
right *= A[i];
}
return B;
}