题目链接
题目描述
给定一个数组 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中存放的是,数组A中除了相同索引位置处其他元素的累乘
从左往右,B中存放的是,索引之前元素的累积,拿变量product来保存累乘值,即B[i] = A[0] A[1] A[2] … A[i-1],这样走到最后,第一个元素先用product代替,最后一个元素是正确的,不用再动弹。
从右往左,上一步B[i]中存放的元素与索引处之后的元素累乘
示例
输入:
[1,2,3,4,5]
输出:
[120,60,40,30,24]
代码
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
if(A.length==0 || A==null){
return null;
}
int n = A.length;
int[] B = new int[n];
/*从左往右累乘 */
for(int i=0,product=1; i<n;i++){
B[i] = product;
product *= A[i]; // 将product赋值给B[i] 后,再去乘A[i],保证B[i]≠A[i]
}
/*从右往左累乘 */
for(int i=n-1,product=1; i>=0;i--){
B[i] *= product;
product *= A[i];
}
return B;
}
}