题解 | #构建乘积数组#

构建乘积数组

http://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46

构建乘积数组

题目

给定一个数组 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](除 A[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] ... A[n-2]) 对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。

思路

重新写了一个乘积的函数,传入当时的下标,返回除了A[i]外其他元素的乘积,然后赋值给B[i]。

代码

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        //若A数组长度为0或者为1都无法构建B数组
        if(A.length==0 || A.length==1){
            return null;
        }
        //定义一个和A长度一致的B数组
        int[] B=new int[A.length];
        for(int j=0;j<B.length;j++){
            int result = getMut(j,A);
            B[j] = result;
        }
        return B;
        
    }
    
    public int getMut(int k,int[] A){
        int result = 1;
         for(int i=0;i<A.length;i++){
            if(i!=k){
                result*=A[i];
            }
        }
        return result;
    }
}

当然可以简单地写,上面代码有点冗余。

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        //若A数组长度为0或者为1都无法构建B数组
        if(A.length==0 || A.length==1){
            return null;
        }
        //定义一个和A长度一致的B数组
        int[] B=new int[A.length];
        for(int j=0;j<B.length;j++){
            int result = 1;
             for(int i=0;i<A.length;i++){
                if(i!=j){
                    result*=A[i];
                }
            }
            B[j] = result;
        }
        return B;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务