题目描述

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

总结

遇事多思考,轻易不要循环。

忆先
4.2k 声望45 粉丝