題目
https://www.lintcode.com/problem/product-of-array-exclude-itself/description?_from=ladder&&fromId=2
實現
- 從右到左遍歷數組算出
suffix_product
並存在一個數組裏 - 定義一個
prefix_product
用於計算當前 i - 1 個元素相乘的值 - 每次計算
B[i]
的時候,只需要prefix_product * suffix_products[i + 1]
就可以了
代碼
class Solution:
"""
@param: nums: Given an integers array A
@return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
"""
def productExcludeItself(self, nums):
if nums is None:
return []
length = len(nums)
B = [0 for i in range(length)]
suffix_products = [0 for i in range(length + 1)]
suffix_products[length] = 1
# Compute suffix products
for i in range(length - 1, 0, -1):
suffix_products[i] = suffix_products[i + 1] * nums[i]
prefix_product = 1
for i in range(length):
B[i] = prefix_product * suffix_products[i + 1]
prefix_product *= nums[i]
return B