1310. 数组除了自身的乘积
给定n个整数的数组nums,其中n> 1,返回一个数组输出,使得output [i]等于nums的所有除了nums [i]的元素的乘积。
样例
样例1
输入: [1,2,3,4]
输出: [24,12,8,6]
解释:
2*3*4=24
1*3*4=12
1*2*4=8
1*2*3=6
样例2
输入: [2,3,8]
输出: [24,16,6]
解释:
3*8=24
2*8=16
2*3=6
挑战
你可以用常数空间复杂度来解决这个问题吗?(注意:出于空间复杂度分析的目的,输出数组不算作额外空间)
注意事项
在没有除和O(n)时间内解决
public class Solution {
/**
* @param nums: an array of integers
* @return: the product of all the elements of nums except nums[i].
*/
public int[] productExceptSelf(int[] nums) {
int[] result = new int[nums.length];
long sum = 1;
int zero = 0;
int flag = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
zero++;
flag = i;
if (zero == 2) return result;
} else {
sum *= nums[i];
}
}
if (zero == 1) {
result[flag] = (int)sum;
} else {
for (int i = 0; i < nums.length; i++) {
result[i] = (int) (sum / nums[i]);
}
}
return result;
}
}