简而言之,给你一个数组,返回一个数组,返回的数组内容不包含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; } }