Given an integers array A. Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B without divide operation. Example For 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 }