1.暴力通过,O(n2)O(n^2)O(n2)
class Solution {
public:
//暴力
vector<int> multiply(const vector<int>& A) {
int len = A.size();
vector<int>res(1, len);
if (len <= 0)return res;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
if (j != i)
res[i] *= A[j];
}
return res;
}
};
2.剑指offer O(n)O(n)O(n)
分别两个for计算上下三角。下三角用连乘可以很容求得,上三角,从下向上也是连乘。 先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。
class Solution {
public:
//先画表
vector<int> multiply(const vector<int>& A) {
int len = A.size();
vector<int>B(len, 1);
for (int i = 1; i<len; i++)//上三角
B[i] = B[i - 1] * A[i - 1];
int temp = 1;
for (int j = len - 2; j >= 0; j--)//下三角
{
temp *= A[j + 1];
B[j] *= temp;
}
return B;
}
};