1.题目描述
给定一个数组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]。不能使用除法。
2.解题思路
题目的意思就是B[i] = A[0]*A[1]…*A[n-2]*A[n-1] / A[i],但是题目要求不能用除法
创建一个left数组和一个rigth数组,拿n = 3为例
res[i] | left[0]*right[0] | left[1]*right[1] | left[2]*right[2] | left[3]*right[3] |
---|---|---|---|---|
right数组 | A[2]*A[1]*A[0]*1 | A[1]*A[0]*1 | A[0]*1 | 1 |
left数组 | 1 | 1*A[0] | 1*A[0]*A[1] | 1*A[0]*A[1]*A[2] |
3.代码
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int []res = new int[A.length];
int []left = new int[A.length];
int []right = new int[A.length];
left[0] = 1;
for(int i = 1;i<A.length;i++){
left[i] = A[i-1]*left[i-1];
}
right[A.length-1] = 1;
for(int i = A.length-2;i>=0;i--){
right[i] = right[i+1]*A[i+1];
}
//计算结果
for(int i = 0;i<A.length;i++){
res[i] = left[i]*right[i];
}
return res;
}
}