前言:
这几天都在做剑指offer上面的习题,所以基本都是上面的习题,推荐你们也做一下,发散思维。 但凡做剑指的题,都会做上标注的。
题目描述
给定一个数组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]。不能使用除法。
题目解析
其实这道题的思路很好想,我们先把这个进行分解如下:
C[i] = A[0]*
A[1]*
…*
A[i-1] = C[i-1]*
A[i-1]。
D[i]=A[i+1]*
…*
A[n-1] = A[i+1] *
D[i+1];
根据这个我们可以先分别求出来C[i]和D[i],在最后求解最后的B[i]。
代码样例
public class Solution{
public int[] multiply(int[] A)
{
if(A.length<=0 || A == null)
{
return null;
}
int[] C = new int[A.length];
C[0] = 1;
for(int i=0;i<C.length;i++)
{
C[i] = C[i-1]*A[i-1];
}
int[] D = new int[A.length];
D[D.length-1] = 1;
for(int i=D.length-2;i>=0;i++)
{
D[i] = D[i+1] * A[i+1];
}
int[] result = new int[A.length];
for(int i=0;i<result.length;i++)
{
result[i] = C[i] * D[i];
}
return result;
}
}