本文主要是介绍每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。
考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。
对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1]*nums[i-1]因为去掉位置i的乘积 就等于上个位置i-1去掉位置的乘积*其本身。
对于R来说,同理,只不过是逆序,注意界定循环的范围。
class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:length=len(nums)L,R,result=[0]*length,[0]*length,[0]*lengthL[0]=1for i in range(1,length):L[i]=L[i-1]*nums[i-1]R[length-1]=1for i in reversed(range(length-1)):R[i]=R[i+1]*nums[i+1]for i in range(length):result[i]=L[i]*R[i]return result
这篇关于每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!