面试题66. 构建乘积数组(dp详细注释)

解题思路:

由于不能除法,就排除了将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

你可能感兴趣的:(面试题66. 构建乘积数组(dp详细注释))