238. 除自身以外数组的乘积
程序员文章站
2022-07-14 18:04:53
...
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
先附代码:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
#方案1:
rst=[]
prod=prod1=1 # 分别表示该数左边(右边)所有数相乘
for i in nums:
rst.append(prod)
prod*=i
for j in range(len(nums),0,-1):
rst[j] *= prod1
prod1*=nums[j]
return rst
#方案2:
rst = [1]*len(nums) #与nums相同长度的全为1的数组,方案对每一个元素赋值
prod=prod1=1
for i in range(len(nums)): # 从左到右
rst[i] = prod
prod *= nums[i]
for j in range(len(nums)-1,0,-1): # 从右到左
rst *= prod1
prod1 *= nums[i]
return rst
第一时间想到使用nums所有数相乘,得到rst。然后用rst除以nums每一个数,就能得到该数意以外其他数之积,然而,事情并没有想象的那么简单!
题目说不能使用除法那就只能想办法让除该数以外其他数相乘了。
我想可以使用两次for循环,第一次按照从左到右每次乘以该数之前的其他数放进一个空数组内;第二次按照从右到左每次乘以该数之后的其他数放进上个数组对应位置!就能完成除该数之外其他数相乘的结果!