题目描述
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Solve it without division and in O(n).
For example, given [1,2,3,4], return [24,12,8,6].
题目解析
简单来说就是对于数组中每一项,求其他项之积。
解题思路
对于每一项硬算其他项之积
恭喜你,你超时了。
算一遍全部元素的积再分别除以每一项
要仔细考虑元素为零的情况。
没有零
直接除下去。
一个零
零的位置对应值为其他元素之积,其他位置为零。
两个以上的零
全部都是零。
AC代码
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
try:
from functools import reduce
finally:
pass
res = []
zeros = nums.count(0)
if zeros == 0:
product = reduce(lambda x, y: x * y, nums)
res = [product // x for x in nums]
elif zeros == 1:
now = nums[::]
pos = now.index(0)
del now[pos]
product = reduce(lambda x, y: x * y, now)
res = [0 if x != pos else product for x in range(len(nums))]
else:
res = [0] * len(nums)
return res
总结
遇事多思考,轻易不要循环。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。