最开始的想法是不妨求出所有数的乘积,再依次除得到各位的输出结果。但是由于nums中各位都有可能是0,而且所有数的乘积也有可能大于int_max,所以这么做要考虑的地方很多,不太可行。
我们不妨先求出前i-1个数的乘积,再从后之前乘以后面的连续乘积即可。
public class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] output = new int[len];
output[0] = 1;
for(int i=1;i<len;i++)
{
output[i] = output[i-1]*nums[i-1];
}
int right = 1;
for( int i=len-1;i>=0;i-- )
{
output[i] *= right;
right *= nums[i];
}
return output;
}
}