| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | func productExceptSelfLong(nums []int) []int {	l := len(nums)	ans := make([]int, l)	zero := false	zeroIdx, product := -1, 1	for i := 0; i < l; i++ {		if nums[i] != 0 {			product *= nums[i]		} else {			if zero {				return ans			}			zero = true			zeroIdx = i		}	}	if zero {		ans[zeroIdx] = product		return ans	}	for i := 0; i < l; i++ {		ans[i] = product / nums[i]	}	return ans}func productExceptSelf(nums []int) []int {	l := len(nums)	ans := make([]int, l)	memset(ans, 1)	for i := 1; i < l; i++ {		ans[i] = ans[i-1] * nums[i-1]	}	for i, tmp := l-2, 1; 0 <= i; i-- {		tmp *= nums[i+1]		ans[i] *= tmp	}	return ans}func memset(a []int, v int) {	a[0] = v	l := len(a)	for bp := 1; bp < l; bp *= 2 {		copy(a[bp:], a[:bp])	}}
 |