Junhc

岂止于博客

剑指offer之构建乘积数组

题目描述
给定一个数组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[0] 1 A[1] A[2] .. A[n-1]
B[1] A[0] 1 A[2] .. A[n-1]
B[2] A[0] A[1] 1 .. A[n-1]
.. A[0] A[1] .. 1 A[n-1]
B[n-1] A[0] A[1] A[2] .. 1
解题代码
public static void main(String[] args) {
    int[] a = {2, 3, 1, 4, 2, 5};
    System.out.println(JSON.toJSONString(multiply(a)));
}

public static int[] multiply(int[] a) {
    int n = a.length;
    int[] b = new int[n];
    // 从左往右累乘
    for (int i = 0, product = 1; i < n; product *= a[i], i++) {
        b[i] = product;
    }
    // 从右往左累乘
    for (int i = n - 1, product = 1; i >= 0; product *= a[i], i--) {
        b[i] *= product;
    }
    return b;
}