【劍指Offer】51構建乘積陣列
阿新 • • 發佈:2018-12-18
題目描述
給定一個數組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秒;空間限制:32768K;本題知識點:陣列
解題思路
思路一
兩次迴圈實現除自身外的累乘,時間複雜度較大。
Python程式碼:
# -*- coding:utf-8 -*- class Solution: def multiply(self, A): # write code here result = [] for i in range(len(A)): L = 1 #中間變數 for j in range(len(A)): if i != j: L *= A[j] result.append(L) return result
思路二
按照下圖,矩陣被分為上三角矩陣和下三角矩陣,分別求得連乘值,最後上三角連乘值乘以對應下三角連乘值即可。
Python程式碼:
# -*- coding:utf-8 -*- class Solution: def multiply(self, A): # write code here L1 = [1] #下三角連乘值,長度n,初始1 L2 = [1] #上三角連乘值,長度n,倒序,初始1 L = [] #結果陣列,長度n for i in range(1,len(A)): L1.append(L1[i-1]*A[i-1]) L2.append(L2[i-1]*A[-i]) for i in range(len(A)): L.append(L1[i]*L2[-(i+1)]) return L