簡而言之,給你一個數組,返回一個數組,返回的數組內容不包含A[i],注意題目中紅色部分。也就是說,你返回的這個數組B,他的每一項都是數組A中除了A[i]以外內容的乘積。數組
思想是這樣的:看下圖,B0 = A1*A2*A3*……An-1;(無A0)spa
B1 = A0*A2*A3*……An-1;(無A1)code
----blog
Bn-1 = A0*A2*A3*……An-2;(無An-1)ip
這個時候呢,看下圖,咱們就把B0至Bn-1都表示出來了;表面上看上去不是很難,可是如何用代碼實現呢,這樣,由於B上的每個元素都是不含B[i]的連乘,若是B中每一個數都等於Bi =(A0*A1*A2*……An-1)/(Ai),是否是很方便呢,but!!題目要求不讓用除法,可是不用除法,這個Ai很差摘出來,因此,這時候,看下圖,把灰色部分當成分界線,再使用連乘,就變成了左右兩部分,而後最後左右再相乘,就實現了咱們的目標,具體看代碼,更加直觀,(我如今在吃包子,以前吃了一個冰激凌,好膩啊!!)it
class Solution { public int[] multiply(int[] A) { // write code here //定義數組A的長度爲n int n = A.Length; //定義一個新的數組B int [] B = new int [n]; //設置B[0]爲1 B[0] = 1 ; //建立左循環 for(int i=1 ; i<n ; i++) { B[i] = B[i-1]*A[i-1]; } //建立右循環 int x = 1; for(int i = n - 2; i >= 0; i--) { x = x * A[i+1]; B[i] *= x; } //得出新數組B return B; } }