JZ51 --- 构建乘积数组

tech2024-12-01  6

题目描述: 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。 (注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。

题解: 由题知:B[i] 是 A数组中所有元素的乘积但不包括 A[i]。 这里需要考虑两个特殊情况: (1)其中有一个元素为0时,其对应下标 B[i] 值应为其他元素的乘积,但除 B[i] ,其他均为0。 (2)当A数组中值为0的元素个数超过1个时,B数组全部为0.

public static int[] multiply(int[] A) { int[] res = new int[A.length]; int sum = 1; boolean flag = true; int count = 0; for(int i = 0;i < A.length;i++){ if(A[i] == 0){ flag = false; count++; continue; } sum *= A[i]; } for(int i = 0;i < res.length;i++){ if(flag == false){ if(count > 1){ res[i] = 0; }else { if (A[i] == 0) { res[i] = sum; } else { res[i] = 0; } } }else { res[i] = sum / A[i]; } } return res; }
最新回复(0)