剑指Offer(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]。不能使用除法。

思路:

在这里插入图片描述

分别从左右两边开始连乘,但是均不乘本位,那么左边的i-1就是i左边数的乘积,i+1就是i右边数的乘积,然后i-1 * i+1 。那么就会得到我们想要的结果。

代码实现:

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        if(A==null||A.length==0)
            return new int[A.length];
        int [] num=new int [A.length];
        num[0]=1;
        for(int j=1;j<A.length;j++){
            num[j]=num[j-1]*A[j-1];
        }
        int n=1;
        for(int z=A.length-1-1;z>=0;z--){
            n=n*A[z+1];
            num[z]*=n;
        }
        return num;
    }
}

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/93199221