```import java.util.ArrayList;
import java.util.List;
public class Solution {
public int[] multiply(int[] A) {
// 初始化B
int[] B = new int[A.length];
// 排除数组A为空、数组A只包含一个数字0
if (A.length <= 0) {
return null;
} else if (A.length == 1 && A[0] == 0) {
return B;
}
// indexs存储索引和统计数组中0的个数
List<Integer> indexs = new ArrayList<>();
int mul = 1; //mul用于记录所有数字的累乘
int mulO = 1;//mul0用于记录包含0的累乘
for (int i = 0; i < A.length; i++) {
if (A[i] == 0) {
indexs.add(i);
}
// mul用于记录数组A所有数的累乘
mul = A[i] * mul;
}
// 获取数字0的索引
Integer index = null;
if (indexs.size() > 0) {
index = indexs.get(0);
}
// 统计包含0的数组A所有数累乘
for (int i = 0; i < A.length; i++) {
if (index != null && i != index) {
// 累乘
mulO = A[i] * mulO;
}
}
if (indexs.size() > 1) {
return B;
} else {
for (int i = 0; i < A.length; i++) {
if (indexs.size() == 1 && index == i) {
// 遍历的数字为0
B[i] = mulO / 1;
} else {
// 遍历的数字不为0
B[i] = mul / A[i];
}
}
}
return B;
}
}
解题思路:
常规解题思路,需考虑数组中包含0的情况;先将数组中0的个数统计出来,若数组中有2个0,则新数组的所有数均为0,若有一个0,则除0处的数字不为0其余均为0;若没有0,则先统计所有数的乘积mul,新数组对应处的数用mul除以该位置处即可。