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


思路1:
暴力

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int[] multiply(int[] A) {
 4         int[] B = new int[A.length];
 5         for(int i = 0;i<A.length;i++){
 6             B[i] = 1;
 7             for(int j = 0;j<A.length;j++)
 8                 if(j!=i)
 9                     B[i]*=A[j];
10         }
11         return B;
12     }
13 }

思路2:



Bi等于上图矩阵每一行的乘积
上图矩阵可以分为2部分,对角线左边与对角线右边。
对角线2边分别计算,然后将2边的结果乘起来,就是最后的结果。


 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int[] multiply(int[] A) {
 4         int[] B = new int[A.length];
 5         for(int i = 1;i<A.length;i++){
 6             B[0] = 1;
 7             B[i] =B[i-1]*A[i-1];
 8         }
 9         int temp=1;
10         for(int j = A.length-2;j>=0;j--){
11            temp *= A[j+1];
12            B[j]=B[j]*temp;
13         }
14         return B;
15     }
16 }
原文地址:https://www.cnblogs.com/zle1992/p/8214674.html