構建乘積數組——牛客、劍指offer題目(python解決)

題目說明:

給定一個數組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

提交結果:

 

 

 

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