【题目】
https://leetcode-cn.com/problems/product-of-array-except-self/submissions/
给定长度为 n 的整数数组 nums
,其中 n > 1,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
【思路】
从左边和右边遍历,计算得到每个元素的左右连乘值,然后左右相乘。
【代码】
// productExceptSelf.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <vector>
using namespace std;
vector<int>productExceptSelf(vector<int>& nums) {
int len = nums.size();
vector<int> left, right, prod;
left.push_back(1);
right.push_back(1);
for (int i = 1; i < len; i++) {
left.push_back(left[i - 1] * nums[i - 1]);
right.push_back(right[i - 1] * nums[len - i]);
}
for (int i = 0; i < len; i++) {
prod.push_back(left[i] * right[len - 1 - i]);
}
for (int i = 0; i < len; i++) {
printf("%d\t", prod[i]);
}
return prod;
}
int main()
{
vector<int> a, res;
for (int i = 1; i <= 4; i++) {
a.push_back(i);
}
res = productExceptSelf(a);
return 0;
}
【总结】
1. 不要乘以自己
2. 左右遍历起点不同,方向相反
3. 不要忘了返回值