package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param A int整型一维数组
 * @return int整型一维数组
 */
func multiply(A []int) []int {
	// write code here
	// B[i] = A[0] * A[1 ]* ... * A[i-1] * A[i+1] * ... * A[n-1](除 A[i] 以外的全部元素的的乘积)

	// B[0]     1       A[1]    A[2]  ...  A[n-2]    A[n-1]
	// B[1]     A[0]    1       A[2]  ...  A[n-2]    A[n-1]
	// ...
	// B[n-2]   A[0]    A[1]    A[2]  ...  1         A[n-1]
	// B[n-1]   A[0]    A[1]    A[2]  ...  A[n-2]    1
	B := make([]int, len(A))
	B[0] = 1
	for i := 1; i < len(A); i++ {
		B[i] = B[i-1] * A[i-1]
	}

	tmp := 1
	for i := len(A) - 1; i >= 0; i-- {
		B[i] *= tmp
		tmp *= A[i]
	}

	return B
}