法一:常规思路,把需要remove的元素去掉,再做累乘。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def multiply(self , A: List[int]) -> List[int]:
        res=[]      
        for i in A:
            Acopy=A[:]#注意:如果写Acopy=A,下一步执行Acopy.remove(i)会把A里面的元素也remove了。
            #tips:用pop根据索引值删除元素也行
            Acopy.remove(i)
            mul=1
            for j in range(len(Acopy)):
                mul=mul*Acopy[j]
            res.append(mul)
        return res

时间复杂度:O(n2),其中n为数组A的长度

法二:双向遍历。

搬运题解区不是江小白的图。 alt

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def multiply(self , A: List[int]) -> List[int]:
        B=[1]*len(A)#初始化
        Bleft=1
        for i in range(1,len(A)):
            Bleft=Bleft*A[i-1]
            B[i]=Bleft#此时的B是B数组左边的值

        Bright=1
        for j in range(len(A)-2,-1,-1):
            Bright=Bright*A[j+1]
            B[j]=B[j]*Bright#用B数组左边的值乘以右边的值就是结果
        return B

时间复杂度:O(n),其中n为数组A的长度,遍历两次数组