如果要在空間複雜度 O(1) 完成,那麼只能透過修改傳入的數列。不過也有說回傳值不算在內。
最險惡的地方在於 0 的出現,否則直接用全部元素乘積除每個就好。除 0 會發生錯誤,所以要避開有 0 的情況。
列舉所有情況有三種︰
1. 0 出現兩次以上︰全部為 0 。
2. 0 出現一次︰只有 [i] == 0 為總乘積,其餘為 0。
3. 沒有 0 出現︰總乘積除[i]。
遍歷一次,取得非0元素的所有乘積與 0 出現次數,然後針對三種情形決定回傳值。
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: product = 1 count = 0 for num in nums: if num: product *= num else: count += 1 if count >= 2: return [0 for _ in nums] elif count == 1: return [0 if num else product for num in nums] return [product // num for num in nums]