你的位置:首页 > Java教程

[Java教程]Lintcode: Product of Array Exclude Itself


Given an integers array A.Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B without divide operation.ExampleFor A=[1, 2, 3], B is [6, 3, 2]

非常典型的Forward-Backward Traversal 方法:

但是第一次做的时候还是忽略了一些问题:比如A.size()==1时,答案应该是空[]

 1 public class Solution { 2   /** 3    * @param A: Given an integers array A 4    * @return: A Long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1] 5   */ 6   public ArrayList<Long> productExcludeItself(ArrayList<Integer> A) { 7     // write your code 8     ArrayList<Long> res = new ArrayList<Long>(); 9     if (A==null || A.size()==0 || A.size()==1) return res;10     long[] lProduct = new long[A.size()];11     long[] rProduct = new long[A.size()];12     lProduct[0] = 1;13     for (int i=1; i<A.size(); i++) {14       lProduct[i] = lProduct[i-1]*A.get(i-1);15     }16     rProduct[A.size()-1] = 1;17     for (int j=A.size()-2; j>=0; j--) {18       rProduct[j] = rProduct[j+1]*A.get(j+1);19     }20     for (int k=0; k<A.size(); k++) {21       res.add(lProduct[k] * rProduct[k]);22     }23     return res;24   }25 }