题目:题目链接
思路:题目说了不能用除法,那就只能用乘法了。对于一个数字i而言,他的答案应该是他前面的数乘上他后面的数。换句话说就是前缀和*后缀和(和在这里就是乘积的意思)。知道了怎么做,就直接求前缀和,后缀和就可以了。上代码吧:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res(nums.size(),1);
/*在res中先存入前缀和,也就是在res[i]中放的是前i-1个数之积
*然后再从后向前依次向前扫描,就求到了后缀和
*前缀和乘后缀和就是答案了。
*/
for(int i = 1;i<nums.size();++i)
res[i] = res[i-1] * nums[i-1];
int suffix_product = nums.back();
for(int i = nums.size()-2;i>=0;--i){
res[i] *= suffix_product;
suffix_product *= nums[i];
}
return res;
}
};
完事。
加油加油加油!!!!