題目說明:
給定一個數組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]。不能使用除法。
解決方案:B數組中元素可以堪稱將A數組中的第i個元素換成1後的所有元素的乘積,可以將A數組中的對角線元素全看成1,因爲對角線元素不相乘,即可看成1。代碼實現時分成兩個循環,第一個循環實現數組A對角線左下角的元素的相乘,賦值給B中相應的元素;第二個循環,完成數組A對角線右上角元素的相乘後得到的值,與第一個循環中得到的左下角元素乘積值相乘,得到題目想的到的最後的值。
代碼如下:
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
n = len(A)
B = [1]*n
#計算A對角線左下角元素的相乘值
for i in range(1,n):
B[i] = B[i-1] * A[i-1]
#計算A對角線右下角元素的相乘值,並與左下角元素相乘
temp = 1
for j in range(n-2, -1, -1):#只需考慮到n-2即可,第一個循環中已得到B[n-1]的最終值
temp *= A[j+1]
B[j] *= temp
return B
提交結果: