版本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
网友评论