题目描述
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n)
时间复杂度内完成此题。
示例 1:
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0]
思路
参考:https://leetcode.cn/problems/product-of-array-except-self/solutions/11472/product-of-array-except-self-shang-san-jiao-xia-sa/
根据表格的主对角线(全为 1 ),可将表格分为 上三角 和 下三角 两部分。分别迭代计算下三角和上三角两部分的乘积
1)初始化:数组 ans ,其中 ans[0]=1 ;辅助变量 tmp=1 。
2)计算 ans[i] 的 下三角 各元素的乘积,直接乘入 ans[i] 。
3)计算 ans[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 ans[i] 。
4)返回 ans 。
class Solution:
def productExceptSelf(self, nums):
ans, tmp = [1] * len(nums), 1
for i in range(1, len(nums)):
ans[i] = ans[i - 1] * nums[i - 1] # 下三角
for i in range(len(nums) - 2, -1, -1):
tmp *= nums[i + 1] # 上三角
ans[i] *= tmp # 下三角 * 上三角
return ans
if __name__ == '__main__':
s=Solution()
nums = [1, 2, 3, 4]
print(s.productExceptSelf(nums))