package com.wsy.sword;
public class Multiply
{
/*
* 构建乘积数组
* 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],
* 其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
*
* 思路:
* * A1 A2 A3
* A0 * A2 A3
* A0 A1 * A3
* A0 A1 A2 *
* B中每个元素为每行元素排除对角线位置的乘积
* 分上下三角计算
*/
public int[] multiply(int[] A) {
int len = A.length;
int[] B = new int[len];
B[0] = 1;
//计算下三角
for (int i = 1; i < len; i++){
B[i] = B[i - 1] * A[i - 1];
}
int temp = 1;
//计算上三角
for (int i = len -2; i >= 0; i--){
temp *= A[i + 1];
B[i] *= temp;
}
return B;
}
}