劍指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[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)

由題目可知

B中每一個元素爲 A中元素(除去A[ i ]) 的累乘

'''
除去題目不能使用除法限制,正向思維: 
得到A累乘結果result,遍歷A,result除等於A的每個元素,然後添加進B,最後返回結果
'''
class Solution:
    def multiply(self, A):
        B = [] # 結果列表
        result = 1  # 初始化累乘值
        for i in A:
            result *= i # 得到累乘結果
        for i in range(len(A)):
            r.append(result // A[i]) # result除以A的每個元素
        return B

由於是乘法且不能使用除法,逆向思維:將A[i] 視爲 1

\ A[0] A[1] A[2] A[3] A[4] A[5] A[n-1]
B[0] 1 A1 A2 A3 A4 A5 A[n-1]
B[1] A0 1 A2 A3 A4 A5 A[n-1]
B[2] A0 A1 1 A3 A4 A5 A[n-1]
B[3] A0 A1 A2 1 A4 A5 A[n-1]
B[4] A0 A1 A2 A3 1 A5 A[n-1]
B[5] A0 A1 A2 A3 A4 1 A[n-1]
B[n-1] A0 A1 A2 A3 A4 A[n-2] 1
# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        B = []  # 結果列表
        for i in range(len(A)):
            temp = A[i]  # 暫存每次循環A[i] 的值
            b = 1  # 初始化累乘值
            for j in range(len(A)):
                A[i] = 1  # 將A[i]置爲 1
                b *= A[j]  # 累乘
            B.append(b)  # 累乘結果存入 結果列表
            A[i] = temp  # 將A[i]的結果復原
        return B
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章