[LeetCode] 238. Product of Array Except Self
坑真的很多,首先要处理全零reduce没有值typeerror的问题。
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: total=reduce(mul, nums) ret =[] if total == 0: try: total = reduce(mul, [x for x in nums if x != 0]) except TypeError: #default value for all element is 0 total = 0 ret = [total if x==0 else 0 for x in nums] else: ret = [total// x for x in nums] return ret
然后发现如果零大于1个,必然返回全零list,改造一下。
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: # 0>1 return 0 if nums.count(0) > 1: return [0 for x in nums] #else total=reduce(mul, nums) ret =[] if total == 0: total = reduce(mul, [x for x in nums if x != 0]) ret = [total if x==0 else 0 for x in nums] else: ret = [total// x for x in nums] return ret
错了两次,不过结果还不错
好吧,不让用除法,改成先算左侧乘积再算右侧乘积,最后相乘。
切片+列表推倒式会超时。
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: # 0>1 return 0 if nums.count(0) > 1: return [0 for x in nums] #else n = len(nums) ret =[1]* n left_mul = 1 right_mul = 1 for i, element in enumerate(nums): ret[i] *= left_mul #calcu the ret[i] left_mul *= element #update left_mul with element for i in range(n - 1, -1, -1): ret[i] *= right_mul right_mul *= nums[i] return ret
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步