leetcode 238. 除自身以外数组的乘积

2020-07-09  本文已影响0人  fanchuang
版本1: 最初,最直接的做法
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:

        # 思路: 最终结果 = (数组中每个数的左边之积) * (数组中每个数的右边之积)
        # 而且如果一个数的左边或右边没有元素的话,那么就乘以1
        
        left_list = [] 
        temp = 1
  

        for i in range(len(nums)):
            left_list.append(temp)
            temp = temp * nums[i]
        # print(left_list)        # [1, 1, 2, 6]


        right_list = []
        temp2 = 1

        # 相当于是倒序遍历一个数组
        for j in nums[::-1]:
            # print(nums[j])
            right_list.append(temp2)
            temp2 *= j

        # print(right_list)

        ret = []
        for m, n in zip(left_list, right_list[::-1]):
            ret.append(m * n)

        # print(ret) 
        return ret 
版本2: 改进一点点
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        # 做法2 空间效率显著提升. 
        # 这里最好是先求出右边的乘积,然后求左边的时候,方便直接得出最终的结果.
        right_list = []
        temp2 = 1
        for j in nums[::-1]:
            right_list.append(temp2)
            temp2 *= j

        left_list = []
        temp = 1

        ret = []
        for i in range(len(nums)):
            ret.append(temp * right_list[-1-i])
            temp *= nums[i]

        return ret 
上一篇下一篇

猜你喜欢

热点阅读