Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
首先,不允许用除法,排除掉所有乘积除该数的思路;
有一种很巧妙的方法,需要正序逆序各一遍,然后相乘遍得到最终结果,看代码:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
//不能用除法,相当于正一遍,逆一遍;
int len = nums.size();
vector<int> tmp(len, 1);
for(int i=1; i<len; i++) {
tmp[i] = tmp[i-1] * nums[i-1];
}
int cur = 1;
for(int i=len-2; i>=0; i--) {
cur = cur * nums[i+1];
tmp[i] = cur * tmp[i];
}
return tmp;
}
};