件名の説明:
配列Aを与えられた[0,1、...、N- 1]、 配列B [0,1、...、N-構築してください 1]、 Bが要素B [I] = A [あり0] Aの[1] ... [-I。1] A [私は+ 1] ... [N - 1]。あなたは分裂を使用することはできません。
アイデアの分析:
私たちは、バイ[0]の=置くことができるAの[1] .... [-I。1] Aを[私は+ 1] ..A [1-N-] [0]として Aの[1] ... 。 [-I 1]及び[I + 1] * ... [N-1]は、 二つの部分の積です。従って、配列Bは行列を使用して作成することができます。
B0 | 1 | A1 | A2 | ... | -2 | -1 |
---|---|---|---|---|---|---|
B1 | A0 | 1 | A2 | ... | -2 | -1 |
B2 | A0 | A1 | 1 | ... | -2 | -1 |
... | A0 | A1 | A2 | 1 | -2 | -1 |
BN-2 | A0 | A1 | A2 | ... | 1 | -1 |
BN-1 | A0 | A1 | A2 | ... | -2 | 1 |
C [I]の定義= [0] ... [-I。1]。トップダウンの順序を算出することができ、Dの定義は、[I] = Aは、[Iは、+ 1] ... [N - 1]。ボトムアップを計算することができます。
コード:
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int []B=new int [A.length];
if(A==null||A.length==0)
return null;
B[0]=1;
for(int i=1;i<B.length;i++){
B[i]=B[i-1]*A[i-1];
}
int temp=1;
for(int j=B.length-2;j>=0;j--){
temp=temp*A[j+1];
B[j]=B[j]*temp;
}
return B;
}
}