題目描述
給定長度為 n 的整數數組 nums
,其中 n > 1,返回輸出數組 output
,其中 output[i]
等於 nums
中除 nums[i]
之外其余各元素的乘積。
示例:
輸入: [1,2,3,4]
輸出: [24,12,8,6]
說明: 請不要使用除法,且在 O(n) 時間復雜度內完成此題。
進階:
你可以在常數空間復雜度內完成這個題目嗎?( 出於對空間復雜度分析的目的,輸出數組不被視為額外空間。)
解題思路
首先從后往前遍歷一遍,用結果數組來存儲除當前數外的后面所有數的乘積,然后從前往后遍歷,用nums存儲除當前數外前面的所有數乘積,再把與結果數組乘積相乘得到除當前數以外所有數的乘積。
代碼
1 class Solution { 2 public: 3 vector<int> productExceptSelf(vector<int>& nums) { 4 vector<int> res(nums); 5 res[nums.size() - 1] = 1; 6 for(int i = res.size() - 2; i >= 0; i--) 7 res[i] = nums[i + 1] * res[i + 1]; 8 for(int i = 1; i < res.size(); i++){ 9 res[i] *= nums[i - 1]; 10 nums[i] *= nums[i - 1]; 11 } 12 return res; 13 } 14 };