赞
踩
除自身之外的乘积,即可以将数组内所有元素相乘得到s,然后遍历到当前元素时,使用所有元素的乘积s/当前元素即可。
1. 首先获得数组中所有元素的乘积s,并记录数组中0的个数
2. 我们进入计算结果集,分为以下三种情况
(1)如果数组中含有两个0,那么整个结果集必然为0,因为你无论撇弃那个元素最终的乘积都为0。
(2)如果数组中含有一个0,那么结果集中除了当前位置,其余位置都为0,我们只需判断当前位置是否为0,不为零将s给它,否则就给0
(3)如果数组中没有0,那么我们只需进行赋值nums[i] = s/nums[i]即可
(4)最后返回nums[i]
- class Solution {
- public:
- vector<int> productExceptSelf(vector<int>& nums) {
- vector<int> ans;
- int s = 1;
- int flag = 0; // 标记0的个数
- // 计算整个数组的乘积,如果是0,不参与运算,如果数组中超过两个零的整个数组皆为0
- for(auto n:nums){
- if(n!=0){
- s*=n;
- }else{
- flag++;
- }
- if(flag>1){
- s = 0;
- break;
- }
- }
- for(int i=0;i<nums.size();i++){
- if(flag>=2){ // 如果含有两个0则整个结果集都为0
- nums[i] = 0;
- }else if(flag==1){ // 含有一个0的情况
- if(nums[i]==0){
- nums[i] = s;
- }else{
- nums[i] = 0;
- }
- }else{ // 没有0的情
- int t = nums[i];
- nums[i] = s/t;
- }
- }
- return nums;
- }
- };
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。