第一种方式,虽然题目上说了不让用除法。
我还是想用除法做一下。
就是把所有的数的乘积为all
然后分别去除每一个数
这样是不对的
因为要考虑的0的事情。如果有零,很难处理,如果不止一个零呢。
这样if要判断好多,不是正解。
0 1 2 3 4 5 0 总乘积是0
直接否了。
第二种
package question238_除自身以外数组的乘积;
/**
* @Classname Solution1
* @Description TODO
* @Date 2020/4/13 13:49
* @Created by mmz
*/
public class Solution1 {
public int[] productExceptSelf(int[] nums) {
int[] left = new int[nums.length];
int[] right = new int[nums.length];
left[0] =1;
right[nums.length-1] = 1;
for(int i = 1;i<nums.length;++i){
left[i] = left[i-1]*nums[i-1];
}
for(int j = nums.length-2;j>=0;--j){
right[j] = right[j+1]*nums[j+1];
}
int[] result = new int[nums.length];
for(int i = 0;i<nums.length;++i){
result[i] = left[i]*right[i];
}
return result;
}
}
用两个数组存储,左边的乘积与右边的乘积,然后result乘积等于左边乘右边很好理解。