思路
第一种方式,先把所有数字都相乘,用总的积除以数组每一位的数字即可。需要遍历数组两边。
同时需要考虑数组中存在0的情况
第二种方式是遍历两次数组,第一次从左到右,第二次从右到左,分别算当前数字左边和右边的数字积。
提交代码:第一种方式
class Solution {
public int[] productExceptSelf(int[] nums) {
int i,zeroPos=-1;
int[] res=new int[nums.length];
Long product=1L;
for(i=0;i<nums.length;i++) {
if(nums[i]==0) {
if(zeroPos!=-1)
return res;
zeroPos=i;
continue;
}
product*=nums[i];
}
if(zeroPos!=-1) {
res[zeroPos]=Integer.parseInt(String.valueOf(product));
return res;
}
for(i=0;i<nums.length;i++)
res[i]=(int)(product/nums[i]);
return res;
}
}
运行结果
提交代码:第二种方式
class Solution {
public int[] productExceptSelf(int[] nums) {
int i,tmp=1,n=nums.length;
int[] res=new int[n];
for(i=0;i<n;i++) {
res[i]=tmp;
tmp*=nums[i];
}
tmp=1;
for(i=n-1;i>=0;i--) {
res[i]*=tmp;
tmp*=nums[i];
}
return res;
}
}