LeetCode-238-除自身以外陣列的乘積

雄獅虎豹發表於2022-04-29

除自身以外陣列的乘積

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

示例說明請見LeetCode官網。

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

解法一:陣列遍歷

大概的思路是遍歷2次陣列分別計算字首乘積和字尾乘積,期間將其相乘,具體處理過程如下:

  • 首先,宣告一個和原陣列大小相同的陣列用於暫存累成的積;
  • 然後,從前往後遍歷陣列記錄每一個位置的字首累乘積;
  • 然後,從後往前遍歷陣列並計算每一個位置的字尾累乘積,並且要和上一次遍歷得到的字首累乘積相乘即可得到相應位置的非自身累乘積。

最後,返回這個暫存陣列即為結果。

import java.util.Arrays;

public class LeetCode_238 {
    public static int[] productExceptSelf(int[] nums) {
        int len = nums.length;
        int[] temp = new int[len];
        // 由於是算乘積,先都初始化為1
        Arrays.fill(temp, 1);
        // 計算字首和乘積 temp[i]表示第i個數前面所有數的乘積
        for (int i = 1; i < len; i++) {
            temp[i] = temp[i - 1] * nums[i - 1];
        }
        // 遞推求字尾和乘積,同時將結果放到字首和陣列中
        // 從後往前,因為要遞推字尾和乘積,末尾的初始為1
        for (int i = len - 1, subfixS = 1; i >= 0; i--) {
            // 當前數的乘積結果等於 字首和乘字尾和
            temp[i] = temp[i] * subfixS;
            // 更新字尾和
            subfixS *= nums[i];
        }
        return temp;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{1, 2, 3, 4};
        // 測試用例,期望輸出: [24,12,8,6]
        for (int i : productExceptSelf(nums)) {
            System.out.print(i + " ");
        }
    }
}
【每日寄語】 也許我不是最優秀的,但我是最努力的。

相關文章