构建乘积数组

给定一个数组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中的对应值。 

posted on 2019-06-14 20:16  Sempron2800+  阅读(162)  评论(0编辑  收藏  举报