1. 程式人生 > >劍指offer -- 構建乘積陣列

劍指offer -- 構建乘積陣列

題目描述

給定一個數組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[i]的值可以看作上圖的矩陣中每行的乘積。 每個B[i]都可以分為兩部分(1左邊的位一部分,右邊的又是一部分)。 下三角用連乘可以很容求得,同理可得上三角。 先算下三角中的連乘,即我們先算出B[i]中的一部分,然後倒過來按上三角中的分佈規律,把另一部分也乘進去。

AC程式碼

import java.util.ArrayList;
public class Solution {
    public int
[] multiply(int[] A) { if(A == null) return null; int len = A.length; int[] B = new int[len]; //下三角 B[0] = 1; for(int i = 1;i < len;i++) B[i] = B[i - 1] * A[i - 1]; //上三角 int tmp = 1; for(int i = len - 2;i >= 0;i--){ tmp *=
A[i + 1]; B[i] *= tmp; } return B; } }