# 题目
给定一个数组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]
。不能使用除法。
# 思路
B[i]
的值是A
数组所有元素的乘积再除以A[i]
,但是题目中给定不能用除法,我们换一个思路,将B[i]
的每个值列出来,如下图:
B[i]
的值可以看作下图的矩阵中每行的乘积。
可以将B
数组分为上下两个三角,先计算下三角,然后把上三角乘进去。
# 代码
function multiply(array) {
const result = [];
if (Array.isArray(array) && array.length > 0) {
// 计算下三角
result[0] = 1;
for (let i = 1; i < array.length; i++) {
result[i] = result[i - 1] * array[i - 1];
}
// 乘上三角
let temp = 1;
for (let i = array.length - 2; i >= 0; i--) {
temp = temp * array[i + 1];
result[i] = result[i] * temp;
}
}
return result;
}