51構建乘積數組
阿新 • • 發佈:2018-01-06
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構建乘積數組