数组—构建乘积数组
题目描述
给定一个数组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]。*不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)
题目分析
数组B中的元素B[i]=A[0]A[1]*…*A[i-1]A[i+1]…A[n-1]*中没有A[i]这一项
思路(一)
function multiply(array){
var a=array;
var b=[];
for(var i=0;i<a.length;i++){
var sum=1;
for(var j=0;j<a.length;j++){
if(i!=j){
sum*=a[j];
}
}
b[i]=sum;
}
return b;
}
思路(二)
通过ECMAScript5为数组定义的迭代方法,使用filter()方法,对数组中的每一项运行给定函数,返回该函数会返回true是像组成的数组,使用map()方法,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
function multiply(array){
if(array==null){
return false;
}
var arr=[];
for(i=0;i<array.length;i++){
//选出array数组中下标index不等于i的值
var filterResult=array.filter(function(value,index){
return(index !=i);
});
var temp=1;
//通过map定义每次执行的函数
filterResult.map(function(value){
temp*=value;
});
arr.push(temp);
}
return arr;
}
思路(三)
假设数组A为[2,3,4,5]
则B中的各个元素值分别为:
B0为[1,3,4,5]的乘积
B1为[2,1,4,5]的乘积
B3为[2,3,1,5]的乘积
B4为[2,3,4,1]的乘积
将与i对应的数字存为1即可
function multiply(array)
{
var result=[];
var a=array;
for(i=0;i<a.length;i++){
var temp=1;
for(j=0;j<a.length;j++){
if(j==i){
temp*=1;
}else{
temp*=array[j];
}
}
result.push(temp);
}
return result;
}
思路(四)
将数组分为上三角与下三角两部分相乘
function multiply(array)
{
// write code here
if(!array||array.length<=0) return;
var len=array.length;
var b=[];
b[0]=1;
for(i=1;i<len;i++){
b[i]=b[i-1]*array[i-1];
}
var temp=1;
for(var i=len-2;i>=0;i--){
temp*=array[i+1];
b[i]*=temp;
}
return b;
}