题目
省流:需要返回一个数组,是原来数组所有元素的乘积除以当前位置元素的值的结果(但是!!不可以使用除法)
示例
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
思路
这里如果不可以使用除法,那么就能通过维护左右两边的乘积列表,最后两者相乘为最终结果
算法
- i 为当前要求的的ans[i],那么L[i]就是i左侧所有数字的乘积, R[i]为右侧所有数字的乘积
- 对于数组L[i],L[0]应该初始化为1,当i > 0时,L[i] = L[i-1] * nums[i-1]
- R数组同理,R[i] = R[i+1] * nums[i+1]
- 最后ans[i] 遍历 = R[i] * L[i] 即可
代码
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> L(nums.size(),0),R(nums.size(),0),ans(nums.size(),0);
//先将二者初始化为1
L[0] = 1;
R[nums.size()-1] = 1;
//开始更新R,L的值
for(int i=1;i<nums.size();++i)
L[i] = L[i-1] * nums[i-1];
for(int i=nums.size()-2;i>=0;--i)
R[i] = R[i+1] * nums[i+1];
//获取ans值
for(int i=0;i<nums.size();++i)
ans[i] = L[i] * R[i];
return ans;
}
};