题目:
给定一个数组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