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 }