版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxm1306192988/article/details/81975028
题目描述
给定一个数组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]。不能使用除法。
题解:
如果用双重循环累乘,每次跳过第i 个位置的数,会出现很多重复的累乘,观察下图:
B[i] 的值可以看作下图的矩阵中每行的乘积。
注意到 下三角从上到下,第 i 行是上一行多乘以一个A[i - 1] ; 上三角从下往上 第 j 行是下一行多乘以一个 A[j+1]。
分别先累乘下三角每行的值,然后再累乘上三角每行的值。
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
if (A == null) {
return null;
}
int[] B = new int[A.length];
if(A.length==0){
return B;
}
// 计算下三角连乘
B[0] = 1;
for (int i = 1; i < A.length; i++) {
B[i] = B[i - 1] * A[i - 1];// 每一个位置是上一行多乘以A[i - 1]
}
// 计算上三角
int temp = 1;
for (int j = A.length - 2; j >= 0; j--) {
temp *= A[j + 1];
B[j] *= temp;
}
return B;
}
}