leetcode 238 除自己之外元素的乘积

遇到的时候有点困难,看了答案发现还算直观。可以维护两个数组,一个代表第i个节点往左所有元素乘积,另一个代表往右所有元素乘积,然后再建立一个答案数组,乘一下即可。当然也可以只维护一个数组,比如先建立往左或者往右的,完成之后在新一轮循环中维护一个数,该数的值为当前节点往相反方向所有元素的乘积,在循环中乘上数组当前值与该数相乘,并赋给数组当前节点,完成赋值。贴代码

 1 class Solution {
 2 public:
 3     vector<int> productExceptSelf(vector<int>& nums) 
 4     {
 5         int l = nums.size();
 6         vector<int> res(l,0);
 7         res[0] = 1;
 8         for(int i = 1 ; i < l ; i++)
 9         res[i] = res[i-1]*nums[i-1];
10         int R = 1;
11         for(int i = l-2 ; i >=-1 ;i--)
12         {
13             res[i+1] *= R;
14             R *= nums[i+1];
15         }
16         return res;
17     }
18 };

 

posted @ 2021-09-29 20:22  zhaohhhh  阅读(29)  评论(0)    收藏  举报