每日一題:構建乘積數組 By python (19.10.6)

題目描述:

給定一個數組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]。不能使用除法。

思路描述:數組指的是乘積除去當前位置的乘積,即如下圖的意思

思路是先乘以後面部分,再乘以後面的部分

class Solution:
    def multiply(self, A):
        if not A:
            return []
        # 計算前面一部分
        num = len(A)
        B = [None] * num
        B[0] = 1
        for i in range(1, num):
            B[i] = B[i-1] * A[i-1]
        # 計算後面一部分
        # 自下而上
        # 保留上次的計算結果乘本輪新的數,因爲只是後半部分進行累加,所以設置一個tmp,能夠保留上次結果
        tmp = 1
        for i in range(num-2, -1, -1):
            tmp *= A[i+1]   
            B[i] *= tmp
        return B

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章