給定一個陣列 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],不能使用除法,規定 B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2],對于 A 長度為 1 的情況,B 無意義,故而無法構建,因此該情況不會存在
解題思路
B[i] 的值可以看作下圖的矩陣中每行的乘積

我們可以先從下三角開始,用連乘求得下三角的部分值,即先算出 B[i] 中的一部分,然后上三角同樣如此,最后一次乘進去,就是最終的 B[i] 值
public class Solution {
public int[] multiply(int[] A) {
int length = A.length;
int[] B = new int[length];
if(length != 0) {
// 先計算下三角連乘
// 只看下三角,此時B[0]的值只是1
B[0] = 1;
// 從B1開始,觀察圖形規律可知:
// 下三角B[i]值 = B[i - 1] * A[i - 1]
for(int i = 1; i < length; i ++) {
B[i] = B[i - 1] * A[i - 1];
}
// 計算上三角連乘
int temp = 1;
// 同樣的規律,只是反過來而已
for(int i = length - 2; i >= 0; i--) {
temp *= A[i + 1];
B[i] *= temp;
}
}
return B;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231836.html
標籤:其他
上一篇:陣列中重復的數字
