剑指offer——构建乘积数组
问题描述
给定一个数组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.先判断数组是否为空
2.不能用除法,所以把数组B看成由一个矩阵来创建
如:B[i]为矩阵中第 i 行所有元素的乘积
B[0] 1 A[1] A[2] ... A[n-2] A[n-1]
B[1] A[0] 1 A[2] ... A[n-2] A[n-1]
B[2] A[0] A[1] 1 ... A[n-2] A[n-1]
...
B[n-2] A[0] A[1] ... A[n-3] 1 A[n-1]
B[n-1] A[0] A[1] ... A[n-3] A[n-2] 1
代码
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
if(A==null||A.length<=0){
return A;
}
int[]B=new int[A.length];
B[0]=1;
for(int i=1;i<A.length;i++){
B[i]=B[i-1]*A[i-1];
}
int tmp=1;
for(int i=A.length-1;i>-1;i--)
{
B[i]*=tmp;
tmp*=A[i];
}
return B;
}
}