思路
不能使用除法导致要想一个好的办法
用对称数组解决。
设 int left[]=new int[a.length],right[]=new int[a.length];
left用来存放每个元素包括自己及其左边所有元素的乘积,right存放每个元素及其右边所有元素的乘积。
这样,b[i]=left[i-1]*right[i+1];当然对于b[0]和b[b.length]需要进行初始化
代码
class Solution {
public int[] constructArr(int[] a) {
if(a.length==0) return new int[0];
if(a.length==1) return new int[0];
int b[]=new int[a.length];
int left[]=new int[a.length];
left[0]=a[0];
int right[]=new int[a.length];
right[a.length-1]=a[a.length-1];
for(int i=1;i<a.length;i++){
left[i]=left[i-1]*a[i];
right[a.length-i-1]=right[a.length-i]*a[a.length-i-1];
}
b[0]=right[1];
b[a.length-1]=left[a.length-2];
for(int i=1;i<a.length-1;i++)
b[i]=right[i+1]*left[i-1];
return b;
}
}