題目描述
給定一個數組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];)
思路
- 將B數組弄成矩陣
- 連乘計算上三角
- 連乘計算下三角並將之乘到上三角中
AC代碼
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int>res(A.size(),1); //需要被初始化
//構建下三角
for (int i = 1;i < A.size();i++)
{
res[i] = res[i-1] * A[i-1];
}
//將上三角的值乘下三角
int temp = 1;
for (int i = A.size()-2;i>=0;i--)
{
temp = temp * A[i+1];
res[i] = temp * res[i];
}
return res;
}
};
int main()
{
vector<int>a = {1,2,3};
Solution so;
vector<int>res = so.multiply(a);
cout << res.size();
cout << res[2] << endl;
return 0;
}