https://leetcode.com/problems/product-of-array-except-self/description/
这题不知道怎么说,我是踩了这个题的。感觉很没意思,但是看了discuss的solution 写法很巧妙
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector <int> ret;
if (nums.size() == 0) return ret;
long long rslt = 1;
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i])
rslt *= nums[i];
else
sum++;
}
if (sum > 1) rslt = 0;
for (int i = 0; i < nums.size(); i++) {
if (sum) {
if (nums[i] == 0) {
ret.push_back(rslt);
} else {
ret.push_back( 0 );
}
} else {
ret.push_back( rslt/nums[i] );
}
}
return ret;
}
};
https://leetcode.com/problems/product-of-array-except-self/discuss/65627/O(n)-time-and-O(1)-space-C++-solution-with-explanation
这里有个很有意思的解法,一次循环解决:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n=nums.size();
int fromBegin=1;
int fromLast=1;
vector<int> res(n,1);
for(int i=0;i<n;i++){
res[i]*=fromBegin;
fromBegin*=nums[i];
res[n-1-i]*=fromLast;
fromLast*=nums[n-1-i];
}
return res;
}
};