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