题目描述
给定一个数组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]。不能使用除法。
思路分析
根据书中提供的思路,可以将n个A数组组成如图所示的矩阵。这样B[i]的计算可分成两部分,即矩阵的下三角部分和矩阵的上三角部分。
下三角部分计算:
令B[0]=1
则B[1]=B[0]*A[0]
B[2]=B[1]*A[1]
B[i] = B[i-1] * A[i-1]
i取值范围是[1,length)
下三角部分计算:
令right=1
则当j = length-2时,right = A[j+1],B[j] = right;
j = length-3时,right = A[j+1],B[j] = right;
j = 0时,right = A[1],B[0] = right;
如此循环两遍即可计算出数组B。
代码实现
import java.util.ArrayList;
public class Solution {
// 记得画图啊
public int[] multiply(int[] A) {
// 根据矩阵的特点求解
int length = A.length;
int[] B = new int[length];
// 计算下三角矩阵
for(int i = 1; i < length; i++){
B[0] = 1;
B[i] = B[i - 1] * A[i-1];
}
// 计算下三角所有的值
int right = 1;
for(int j = (length - 2); j >=0; j--){
right *= A[ j +1];
B[j] *= right;
}
return B;
}
}