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]
, return [6, 3, 2]
.
//列出式子,找规律,数学问题
public class Solution {
/**
* @param A: Given an integers array A
* @return: A Long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
*/
public ArrayList<Long> productExcludeItself(ArrayList<Integer> A) {
// write your code
int n=A.size();
ArrayList<Long> l=new ArrayList<Long>();
if(n==0)
return null;
if(n==1&&A.get(0)==0){
l.add((long)1);
return l;
}
for(int i=0;i<n;i++)
l.add((long) 1);
//上三角
for(int i=n-2;i>=0;i--){
l.set(i,(long)(A.get(i+1))*l.get(i+1));
}
//下三角
long tmp=(long) 1;
for(int i=1;i<n;i++){
tmp=tmp*(long)(A.get(i-1));
l.set(i,tmp*l.get(i));
}
return l;
}
}