解题思路:
由于不能除法,就排除了将a所有元素乘起来再除a[i]的方法。
所以我们可以根据题意得知B[i]要求的是a[0]...a[i-1]的所有元素的乘积乘上a[i+1]...a[n-1]所有元素的乘积。
我们可以用两个dp来存储之前进行过的乘法计算,dp[i]表示从0到i所有数的乘积,dph[i]表示从i到n-1所有数的乘积。
class Solution {
public int[] constructArr(int[] a) {
if(a==null||a.length==0)return new int[]{};
if(a.length==1){//只有一个元素返回[1]
int[] B={1};
return B;
}
if(a.length==2){//有两个元素返回对调值
int[] B={a[1],a[0]};
return B;
}
int[] res=new int[a.length];//结果数组
int[] dp=new int[a.length];//前dp数组
int[] dph=new int[a.length];//后dp数组
dp[0]=a[0];//初始化
dph[a.length-1]=a[a.length-1];//初始化
for(int i=a.length-2;i>=0;i--){//循环赋值
dph[i]=dph[i+1]*a[i];
}
for(int i=1;i<a.length;i++){//循环赋值
dp[i]=dp[i-1]*a[i];
}
res[0]=dph[1];
res[a.length-1]=dp[a.length-2];
for(int i=1;i<a.length-1;i++){//计算
res[i]=dp[i-1]*dph[i+1];
}
return res;
}
}