解法一:(左右乘積列表)利用索引左側所有數字的乘積和右側所有數字的乘積(即前綴與后綴)相乘得到答案。
class Solution {public int[] productExceptSelf(int[] nums) {int len = nums.length;int[] L = new int[len]; // 存放i左邊的乘積int[] R = new int[len]; // 存放i右邊的乘積int[] result = new int[len]; // 第1個元素左邊沒有數據,乘積為0L[0]=1;for(int i=1;i<len;i++){L[i]=L[i-1]*nums[i-1];}// 第len個元素右邊沒有數據,乘積為0R[len-1]=1;for(int i=len-2;i>=0;i--){R[i]=R[i+1]*nums[i+1];}// 計算for(int i=0;i<len;i++){result[i]=L[i]*R[i];}return result;}
}
注意:
- 左乘積數組:第1個元素左邊沒有數據,乘積為0
- 右乘積數組:第len個元素右邊沒有數據,乘積為0