版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/83854155
给定长度为 n 的整数数组 nums
,其中 n > 1,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
说明: 请**不要使用除法,**且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
解题思路
首先想到的思路就是将所有元素乘起来,然后遍历数组中的元素再除以对应元素即可。但是这种做法很快被驳回,我们不可以使用除法。非常简单,我们可以遍历nums
,在遍历的过程中将对应元素累乘,例如
1 2 3 4
1 1 2 6
这样我们就得到了对应元素左边所有元素的乘积。然后我们反向遍历nums
,做相同操作即可。
1 2 3 4
24 12 4 1
再将两个结果相乘即可。
1 2 3 4
24 12 8 6
代码如下
class Solution:
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
nums_len = len(nums)
leftPro = [1]*len(nums)
for i, num in enumerate(nums[:-1]):
leftPro[i+1] = leftPro[i]*num
right = 1
for i in range(nums_len-1, -1, -1):
leftPro[i] *= right
right *= nums[i]
return leftPro
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!