方法1:遍历

思路:也就是B[i]=A[0]*A[1]...A[n] 其中不包括A[i];

//-------------复杂度为O(n^2)----------
    public int[] multily1(int[] A){
        if(A.length==0){
            return A;
        }
        int[] B=new int[A.length];
        int result=1;
        for(int i=0;i<A.length;i++){
            for(int j=0;j<A.length;j++){
                if(i==j){
                    continue;
                }
                result=result*A[j];
            }
            B[i]=result;
            result=1;
        }
        return B;
    }

方法2:二维矩阵

图片说明

       //-----------方法2:---------------------------
    public int[] nultiply2(int[] A){
        // 对A数组i项右侧自下往上累乘 时间复杂度O(n)
        // 将B拆分为A[0] *...* A[i-1]和A[n-1]*...*A[i+1] 两部分
        if(A.length==0){
            return A;
        }
        int[] B=new int[A.length];
        B[0]=1;
        //先计算左下三角形,此时B[0]只有一个元素,设为1
        for(int i=1;i<A.length;i++){
            B[i]=B[i-1]*A[i-1];
        }
        int temp=1;
        //计算右上三角形
        for(int i=A.length-1;i>=0;i--){
            B[i]=B[i]*temp;
            temp=temp*A[i];
        }
        return B;
    }