import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型一维数组
     */
    public int[] productExceptSelf (int[] nums) {
        // write code here
        int n = nums.length;
        int[] res = new int[n];
        int[] l = new int[n + 1];
        int[] r = new int[n + 1];
        l[0] = 1;
        r[0] = 1;

        for (int i = 1; i <= n; i++) {
            l[i] = l[i - 1] * nums[i - 1];
        }
        for (int i = 1; i <= n; i++) {
            r[i] = r[i - 1] * nums[n - i];
        }

        for (int i = 0; i < n; i++) {
            int ans = l[Math.max(0, i - 1)] * r[Math.max(0, n - i - 2)];
            res[i] = ans;
        }
        return res;
    }
    }

语言是Java。

这道题考察了以下知识点:

  1. 数组操作:包括数组的创建、访问和赋值操作。
  2. 数学运算:涉及乘法、数组元素之间的计算。
  3. 循环:使用for循环遍历数组进行计算。
  4. 方法声明和返回值:定义了一个公有方法productExceptSelf,接收一个int类型的数组作为参数,并返回一个int类型的数组作为结果。

代码的文字解释如下:

  1. 创建一个长度为n的整型数组res,用于存放结果。
  2. 创建两个辅助数组lr,它们分别记录每个位置左侧的乘积和右侧的乘积。l[0]和r[0]初始化为1,表示左侧和右侧初始乘积为1。
  3. 使用两个for循环,分别计算lr的元素值:l[i]表示当前位置左侧所有元素的乘积,计算方法为l[i] = l[i - 1] * nums[i - 1]。r[i]表示当前位置右侧所有元素的乘积,计算方法为r[i] = r[i - 1] * nums[n - i],其中n表示数组的长度。
  4. 使用一个for循环遍历数组,计算结果数组res:对于每个位置i,将左侧乘积和右侧乘积相乘即为该位置的结果值。具体计算方法为ans = l[Math.max(0, i - 1)] * r[Math.max(0, n - i - 2)]。将计算得到的结果放入结果数组res中。
  5. 返回结果数组res作为答案。