给定一个整数数组A。
定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。
【学习的好方法!!!!】
public ArrayList<Long> productExcludeItself(ArrayList<Integer> A) {
// write your code
ArrayList<Long> B = new ArrayList<Long>();
int len = A.size();
if(len==0)
return B;
Long[] left = new Long[len];//left[i]表示前i-1个数的乘积
Long[] right = new Long[len];//right[i]表示i之后的元素的乘积
long num = 1;
left[0]=num;
for(int i = 0;i<len-1;i++)
{
left[i+1] = left[i] * A.get(i);
}
right[len-1] = num;
for(int j = len-1;j>0;j--){
right[j-1] = right[j] * A.get(j);
}
for(int k =0 ; k<len;k++)
B.add(left[k]*right[k]);
return B;
}
【最根本的方法】
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
ArrayList<Long> B = new ArrayList<Long>();
for(int i=0;i<A.size();i++)
{ long b = 1;
for(int j= 0;j<A.size();j++)
{
if(i!=j)
b*=A.get(j);
}
B.add(b);
}
return B;
}
}
59

被折叠的 条评论
为什么被折叠?



