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]
.
个人觉得这道题挺好玩的哈哈。~
这道题比较常规的思路,也是我的思路就是分别先求出这个数右边的所有数的乘积和左边所有数的乘积然后再左右两个乘积相乘。
按照这个思路的话首先就需要3个int[]来分别store右边的乘积,左边的乘积以及总的乘积了。
需要注意,因为乘积是不包含这个数的,以左边乘积计算为例:loop是从i=0开始,那么第一个乘积计算的就应该是left[i+1]而非left[i]。
而且从最开始left[1]计算的时候,要提前设定left[0]=1,因为我们没有办法用公式算出left[0]的值,当只有一个数的时候,他的乘积只能是本身乘以1。
因此同理,从右边开始的话,right[nums.length-1]也要设定为1,而右边也是从right[i-1]开始。
代码如下:
public class Solution {
public int[] productExceptSelf(int[] nums) {
int[] result=new int[nums.length];
int[] left= new int[nums.length];
int[] right=new int[nums.length];
left[0]=1;
right[nums.length-1]=1;
//left side
for(int i=0;i<nums.length-1;i++){
left[i+1]=left[i]*nums[i];
}
//right side
for(int i=nums.length-1;i>0;i--){
right[i-1]=right[i]*nums[i];
}
//together
for(int i=0;i<nums.length;i++){
result[i]=left[i]*right[i];
}
return result;
}
}