题目描述: 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output , 其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。1
示例: 输入: [1,2,3,4] 输出: [24,12,8,6]
两种求解方法:
方法1:一个数组存储当前索引左边的乘积,另一个数组存储当前索引右边的乘积,对应位置上的乘积就是返回值中对应位置上的结果. 方法2: 只利用一个数组进行存储结果; 在此基础上乘以后边数的乘积(此时只需一个变量存储右边数的乘积).代码: 以方法2为例
public int[] productExceptSelf(int[] nums) { //通过一个数组记录左边乘积,另一个数组记录右边乘积 //要弄清数组的含义,最好写出来,以免混淆 int len = nums.length; int[] left = new int[len]; left[0] = 1;//索引为0时最左边没有元素,为了保证后面的乘法可以继续进行,赋值为1. //更新left //更新左边部分乘积的和时,索引从左边开始 for(int i = 1;i<len;i++){ left[i] = left[i-1] * nums[i-1]; } //更新右边部分乘积时索引从右边开始 int right = 1; for(int i = len-1;i>=0;i--){ left[i] = left[i] * right; right = right * nums[i]; } return left; }https://leetcode-cn.com/problems/product-of-array-except-self/ ↩︎