B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1],拆分一下
left = A[0]A[1]...A[i-1],right = A[i+1]...A[n-1],则B[i] = left * right。
具体点可见下图(图取自牛客)
蓝色部分为left,红色部分为right。1为边界条件(乘1相当于没乘)
JavaScript代码如下
注意,
- 循环里的两条语句,用来控制边界值1,不能颠倒顺序。若交换顺序,会多乘上一个array[i]
比如B[3] = array[0]array[1]array[2]
交换则成了B[3] = array[0]array[1]array[2]*array[3] - 第一个for循环是= 。第二个for循环是 *=,用来求最终的B[i]
function multiply(array) { let B = []; let temp = 1; for(let i=0; i < array.length; i++){ B[i] = temp; //求左边的累乘 temp *= array[i]; } temp = 1; for(let j = array.length-1; j >= 0; j--){ B[j] *= temp; //求右边的累乘 temp *= array[j]; } return B; }