Go语言实现:【剑指offer】构建乘积数组

该题目来源于牛客网《剑指offer》专题。

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0] * A[1] * … * A[i-1] * A[i+1] * … * A[n-1]。不能使用除法。

Go语言实现:

//两层循环
//b[0]=1*a[1]*...*a[n-1]
//b[1]=1*a[0]*a[2]*...*a[n-1]
func multiply(a []int) []int {
   length := len(a)
   var b []int
   //第一层for取b的下标
   for i := 0; i < length; i++ {
      temp := 1
      //第二层for取该下标的值
      for j := 0; j < length; j++ {
         if i != j {
            temp *= a[j]
         }
      }
      b = append(b, temp)
   }
   return b
}
//矩阵每行乘积
func multiply(a []int) []int {
   //a=012345
   lengthA := len(a)
   var b []int
   //b[0]=1
   b = append(b, 1)
   temp := 1
   //先算下三角的值
   //b[1]=1*a[0]
   //b[2]=1*a[0]*a[1]
   for i := 1; i < lengthA; i++ {
      temp *= a[i-1]
      b = append(b, temp)
   }

   lengthB := len(b)
   temp = 1
   //再算上三角的值
   //b[4]=a[5]*下三角的值
   //b[3]=a[5]*a[4]*下三角的值
   for i := lengthB - 2; i >= 0; i-- {
      temp *= a[i+1]
      b[i] = temp * b[i]
   }
   return b
}

参考图片:
在这里插入图片描述

原文地址:https://www.cnblogs.com/dubinyang/p/12099419.html