给定一个数组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 # -*- coding:utf-8 -*- 2 class Solution: 3 def multiply(self, A): 4 n = len(A) 5 mat = [[1 for _ in range(n)]for _ in range(n)] 6 for i in range(n): 7 for j in range(n): 8 if i != j: 9 mat[i][j] = A[j] 10 B = [1] * n 11 for i in range(n): 12 mul = 1 13 for j in range(n): 14 mul *= mat[i][j] 15 B[i] = mul 16 return B 17 # write code here
思路:先构建mat二维数组,这个矩阵的特点是,主对角线都是1。从每一行来看,除了在主对角线上的元素为1,其余元素与A对应位置相同。
利用上面的步骤建立好的二维数组,进行本题的计算,只需要将每一行所有元素相乘就可以得到B中的对应值。