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].
注意泄题加粗部分,不用除法,解法一用除法来做,注意元素可能为0的情况。
public class Solution {
public int[] productExceptSelf(int[] nums) {
int res=1;
int zeroCount=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
res*=nums[i];
}else{
zeroCount++;
}
}
int[] result=new int[nums.length];
if(zeroCount>1) return result;
else if(zeroCount==1){
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
result[i]=res;
}else{
result[i]=0;
}
}
return result;
}else{
for(int i=0;i<nums.length;i++){
result[i]=res/nums[i];
}
return result;
}
}
}
解法二:(不用除法。分别计算每个元素的左边部分和右边部分的所有元素的乘积即为最终结果)
public class Solution {
public int[] productExceptSelf(int[] nums) {
int len=nums.length;
int[] res=new int[len];
res[len-1]=1;
for(int i=len-2;i>=0;i--){
res[i]=res[i+1]*nums[i+1];
}
int left=1;
for(int i=0;i<len;i++){
res[i]*=left;
left*=nums[i];
}
return res;
}
}