题目描述

给定一个数组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];)

代码一

思想
可以将B[i]分别分成左边的乘积,然后再乘上右边的乘积在一开规定B[0] = A[1] A[2] A[n-1],B[n-1] = A[0] A[1] A[n-2],所以可以假设B[0]的左边乘积是1,B[n-1]右边的乘积是1;这样B[0]还是等于A[1] A[2] A[n-1],B[n-1] = A[0] A[1] A[n-2].

  1. public static int[] multiply(int[] A) {
  2. int[] B = new int[A.length];
  3. int res = 1;
  4. //先计算左边的
  5. for(int i=0;i<A.length;i++) {
  6. B[i] = res;
  7. res *= A[i];
  8. }
  9. //在在第一个for循环的基础上再乘上右边的
  10. res = 1;
  11. for(int i=A.length-1;i>=0;i--) {
  12. B[i] *= res;
  13. res *= A[i];
  14. }
  15. return B;
  16. }