1. 程式人生 > 實用技巧 >238. 除自身以外陣列的乘積

238. 除自身以外陣列的乘積

給你一個長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

示例:

輸入: [1,2,3,4]
輸出: [24,12,8,6]

class Solution {
    public int[] productExceptSelf(int[] nums) {
         int length = nums.length;
        int[] answer = new int[length];

        // answer[i] 表示索引 i 左側所有元素的乘積
        // 因為索引為 '0' 的元素左側沒有元素, 所以 answer[0] = 1
        answer[0] = 1;
        for (int i = 1; i < length; i++) {
            // 當前位置左邊所有數乘積
            answer[i] = nums[i - 1] * answer[i - 1];
        }

        // R 為右側所有元素的乘積
        // 剛開始右邊沒有元素,所以 R = 1
        int R = 1;
        for (int i = length - 1; i >= 0; i--) {
            // 對於索引 i,左邊的乘積為 answer[i],右邊的乘積為 R
            answer[i] = answer[i] * R;
            // R 需要包含右邊所有的乘積,所以計算下一個結果時需要將當前值乘到 R 上
            R *= nums[i];
        }
        return answer;
    }
}

  

提示:題目資料保證陣列之中任意元素的全部字首元素和字尾(甚至是整個陣列)的乘積都在 32 位整數範圍內。

說明: 請不要使用除法,且在 O(n) 時間複雜度內完成此題。

進階:
你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出陣列不被視為額外空間。)

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/product-of-array-except-self
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。