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]
.
Follow up:
Could you solve it with constant space complexity? (Note: The output array
does not count as extra space for the purpose of space complexity analysis.)
Solution:
straightforward
1. there would be several 0s in the array. if have more than one 0, then result should be [0000], if only has one 0, result [0000{non-zero}000]
2. if no 0s in array, keep all element product, each time divided by array[i]
public int[] productExceptSelf(int[] nums) { int[] result = new int[nums.length]; long pro = 1; int zeroNum = 0; for(int i=0;i<nums.length;i++){ result[i] = 0; if(nums[i] == 0) { zeroNum++; }else { pro *= (long) nums[i]; } } if(zeroNum>1) return result; for(int i=0;i<nums.length;i++){ if(nums[i] == 0) { result[i] = (int)pro; }else { result[i] = (zeroNum == 1) ? 0 : (int) (pro/nums[i]); } } return result; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
[LeetCode 238] Product of Array Except Self
原文:http://blog.csdn.net/sbitswc/article/details/48514873