您的位置:首页 > Web前端

剑指offer--(15)构建乘积数组--Java描述

2018-02-24 18:21 323 查看
写在前面:
    这道题,我们首先要掌握乘积的规律

(1)B[0] = A[1] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[0])

(2)B[1] = A[0] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[1])

(3)B[2] = A[0] * A[1] * A[3] * A[4] *....*A[n-1] ;(没有A[2])
    也就是说,B[i]=数组A所有项的乘积,除了A[i]
    这样,我们就可以构造出一个矩阵,由上三角和下三角组成。先计算出下三角的乘积,再计算上三角的乘积,即为B数组每个元素的值。
搜索:

B[0]1A[1]A[2]。。。A[n-2]A[n-1]
B[1]A[0]1A[2]。。。A[n-2]A[n-1]
B[2]A[0]。。。1。。。A[n-2]A[n-1]
。。。A[0]A[1]。。。1A[n-2]A[n-1]
B[n-2]A[0]A[1]A[2]A[n-3]1A[n-1]
B[n-1]A[0]A[1]A[2]A[n-3]A[n-2]1
代码实现如下:public int[] multiply(int[] A) {

int length = A.length;
int[] B = new int[length];
if (length != 0) {

B[0] = 1;
// 先计算下三角的值
for (int i = 1; i < length; i++) {
B[i] = B[i - 1] * A[i - 1];
}
int temp = 1;
// 再计算上三角的值
for (int j = length; j >= 0; j--) {
temp = temp * A[j + 1];
B[j] = temp * B[j];
}
}
return B;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指Offer Java