题目
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
题解
这道题应该可以用动态规划做,留个坑以后填。下面这个方法是讨论区里的解答,搬过来,看完觉得确实挺聪明的,先上代码:
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
l = len(nums)
temp = 1
output = []
for i in range(l):
output.append(temp)
temp = temp * nums[i]
temp =1
for i in range(l-1,-1,-1):
output[i] *= temp
temp = temp * nums[i]
return output
解释一下
以
1 2 3 4 5 6 为例:
第一次for循环结束后的output为(下标和nums相对应):
1 1 2 6 24 120 720
可以看到,output里每个每个位置的记录着该位置之前的所有数之积
第二趟循环是从后向左循环,原理一样,记录着该数邮编所有数之积,
只不过直接乘到output的这个位置里了,所以第二遍走完就得到了最终的output