Constant space solution that counting zeros:
class Solution { public int[] productExceptSelf(int[] nums) { int[] result = new int[nums.length]; int zeros = 0; int multi = 1; for (int num : nums) { if (num == 0) { zeros++; } else { multi *= num; } if (zeros > 1) { return result; } } for (int i = 0; i < nums.length; i++) { if (zeros > 0 && nums[i] != 0) { continue; } result[i] = nums[i] == 0 ? multi : multi / nums[i]; } return result; } }
Nice Solution:
class Solution { public int[] productExceptSelf(int[] nums) { int[] result = new int[nums.length]; result[0] = 1; for (int i = 1; i < nums.length; i++) { result[i] = result[i - 1] * nums[i - 1]; } int multiRight = 1; for (int i = nums.length - 1; i >= 0; i--) { result[i] *= multiRight; multiRight *= nums[i]; } return result; } }