思路:题目不让用除法,类似于前缀和,我们很容易想到前缀积和后缀积,也就是说对于每一位数字,我们计算一个前缀积数组用来存放某个数字之前的数字之积,再用一个后缀数组保存这个数组中这个数后面数的乘积,之后前缀积和后缀积相乘即得解
1 public static int[] constructArr(int[] a) { 2 int len = a.length; 3 int[] left = new int[len]; 4 int[] right = new int[len]; 5 left[0] = right[len - 1] = 1; 6 for(int i = 1; i < len; i ++) { 7 left[i] = left[i - 1] * a[i - 1]; 8 right[len - i - 1] = right[len - i] * a[len - i]; 9 } 10 int[] ans = new int[len]; 11 for(int i = 0; i < len; i ++) { 12 ans[i] = left[i] * right[i]; 13 } 14 return ans; 15 }