238.出了自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

不要使用除法,且在 O(n) 时间复杂度内完成此题。

思路

  • 前缀和
  • 后缀和
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.wereash.scut_hot100.dp;

import java.util.Scanner;

/**
* @Author: WereAsh
* @Date:2026-02-18 23:19
**/
public class Solution238 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String[] str=scanner.nextLine().split(",");
int n=str.length;
int[] nums=new int[n];
for (int i = 0; i < n; i++) {
nums[i]=Integer.parseInt(str[i]);
}
int[] ans=new int[n]; //ans[i]代表nums[i]之前的乘积
int pre=1,rear=1;
for(int i=0;i<n;i++){
ans[i]=pre;
pre*=nums[i];
}
for(int i=n-1;i>=0;i--){
ans[i]*=rear;
rear*=nums[i];
}
for (int i = 0; i < n; i++) {
System.out.print(ans[i]+",");
}
}
}