题解 | #构建乘积数组#
构建乘积数组
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;
}
}