classSolution { public: vector<int> productExceptSelf(vector<int>& nums){ int all = 1; vector<int> lToR; vector<int> rToL; vector<int> result; for (int num: nums) { all *= num; lToR.push_back(all); } all = 1; for (auto it = nums.rbegin(); it != nums.rend(); it++) { all *= *it; rToL.push_back(all); } reverse(rToL.begin(), rToL.end()); for (int i = 0; i < nums.size(); i++) { int left = 1, right = 1; if (i>0) left = lToR[i-1]; if (i+1<nums.size()) right = rToL[i+1]; result.push_back(left * right); } return result; } };
classSolution { public: vector<int> productExceptSelf(vector<int>& nums){ int all = 1; vector<int> result; for (auto it = nums.rbegin(); it != nums.rend(); it++) { all *= *it; result.push_back(all); } reverse(result.begin(), result.end()); int product = 1; for (int i = 0; i < nums.size(); i++) { int left = 1, right = 1; if (i>0) left = product; if (i+1<nums.size()) right = result[i+1]; result[i] = left * right; product *= nums[i]; } return result; } };