1. 程式人生 > >51構建乘積數組

51構建乘積數組

for != 給定 imp nbsp gpo 題目 new 就是

題目描述

給定一個數組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]。不能使用除法。


思路1:
暴力

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int[] multiply(int[] A) {
 4         int[] B = new int[A.length];
 5         for(int i = 0;i<A.length;i++){
 6             B[i] = 1;
7 for(int j = 0;j<A.length;j++) 8 if(j!=i) 9 B[i]*=A[j]; 10 } 11 return B; 12 } 13 }

思路2:



Bi等於上圖矩陣每一行的乘積
上圖矩陣可以分為2部分,對角線左邊與對角線右邊。
對角線2邊分別計算,然後將2邊的結果乘起來,就是最後的結果。


 1 import java.util.ArrayList;
 2 public class Solution {
3 public int[] multiply(int[] A) { 4 int[] B = new int[A.length]; 5 for(int i = 1;i<A.length;i++){ 6 B[0] = 1; 7 B[i] =B[i-1]*A[i-1]; 8 } 9 int temp=1; 10 for(int j = A.length-2;j>=0;j--){ 11 temp *= A[j+1]; 12 B[j]=B[j]*temp;
13 } 14 return B; 15 } 16 }

51構建乘積數組