Product of Array Except Self
*Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Solve it without division and in O(n).
For example, given [1,2,3,4], return [24,12,8,6].*
题目不让用除法,直接懵逼,看到巧妙的解法,自己写一下思路,以免以后忘记
核心就是:
先正序扫一遍求出当前位置之前所有数字的乘积
再倒序扫一遍求出当前位置之后所有数字的乘积
可以就用一个数组来表示
当正序扫完一遍,数组中存的是,每个位置之前的所有数字的乘积
拿题目中的{1,2,3,4}来说,初始化数组的第一位为1,那么数组此时为{1,1,2,6}
让此时的数组中的元素 * 当前元素之后的元素的乘积 就是要得到的结果,我们记之后的元素乘积是right
那么最后一位后面没有数字,right=1;
3位于数组倒数第二位,后面的数字是4,right=right(上一次的=1)*4(nums[i]—-当前的元素)
然后 乘 right即可
public class Solution {
public int[] productExceptSelf(int[] nums) {
int n=nums.length;
//结果集result
int[] result=new int[n];
//初始化第一位为1
result[0]=1;
for(int i=1;i<n;i++){
//result[i]记录了当前位之前所有数字的乘积
result[i]=result[i-1]*nums[i-1];
}
int right=1;
//倒序遍历
for(int i=n-1;i>=0;i--){
//result[i]等于要求的结果
result[i]*=right;
//right等于当前数字之后(右方向的数字乘积)
right*=nums[i];
}
return result;
}
}