题目链接

题目描述

给定一个数组 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]中存放的元素与索引处之后的元素累乘

示例

4240a69f-4d51-4d16-b797-2dfe110f30bd.png

  1. 输入:
  2. [1,2,3,4,5]
  3. 输出:
  4. [120,60,40,30,24]

代码

  1. import java.util.ArrayList;
  2. public class Solution {
  3. public int[] multiply(int[] A) {
  4. if(A.length==0 || A==null){
  5. return null;
  6. }
  7. int n = A.length;
  8. int[] B = new int[n];
  9. /*从左往右累乘 */
  10. for(int i=0,product=1; i<n;i++){
  11. B[i] = product;
  12. product *= A[i]; // 将product赋值给B[i] 后,再去乘A[i],保证B[i]≠A[i]
  13. }
  14. /*从右往左累乘 */
  15. for(int i=n-1,product=1; i>=0;i--){
  16. B[i] *= product;
  17. product *= A[i];
  18. }
  19. return B;
  20. }
  21. }