美文网首页
leetcode 238. 除自身以外数组的乘积

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

作者: fanchuang | 来源:发表于2020-07-09 18:15 被阅读0次
    版本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 
    

    相关文章

      网友评论

          本文标题:leetcode 238. 除自身以外数组的乘积

          本文链接:https://www.haomeiwen.com/subject/hmwscktx.html