剑指offer 51-55

51.构建乘积数组

给定一个数组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]和B[n-1] = 1)

通过B[i]的构成不难发现它总由左右两个部分组成,所以我们可以用两个辅助数组,一个数组left用来存从0到i-1的所有乘积,一个数组right用来存length-1到i+1的所有乘积,然后B[i]=left[i-1]*right[i+1]即可。
代码如下

public class Solution {
    public int[] multiply(int[] A) {
        int length = A.length;
        int[] left = new int[length];
        int[] right = new int[length];
        int[] res = new int[length];
        left[0] = A[0];
        right[length-1] = A[length-1];
        for(int i = 1;i0;j--){
            right[j] = A[j]*right[j+1];
        }
        res[0] = right[1];
        res[length-1] = left[length-2];
        for(int k=1;k

你可能感兴趣的:(剑指offer 51-55)