解題思路:利用索引左側所有數字的乘積和右側所有數字的乘積(字首和字尾)相乘來解決.
我的解法:
class solution
// r[i] 為索引 i 右側所有元素的乘積
// 對於索引為 'length-1' 的元素,因為右側沒有元素,所以 r[length-1] = 1
r[length - 1] = 1;
for (int i = length - 2; i >= 0; i--)
// 對於索引 i,除 nums[i] 之外其餘各元素的乘積就是左側所有元素的乘積乘以右側所有元素的乘積
for (int i = 0; i < length; i++)
return answer;}};
方法二:空間複雜度 o(1)的方法思路
儘管上面的方法已經能夠很好的解決這個問題,但是空間複雜度並不為常數。
由於輸出陣列不算在空間複雜度內,那麼我們可以將 l 或 r 陣列用輸出陣列來計算。先把輸出陣列當作 l 陣列來計算,然後再動態構造 r 陣列得到結果。讓我們來看看基於這個思想的演算法。
演算法1. 初始化 answer 陣列,對於給定索引 i,answer[i] 代表的是 i 左側所有數字的乘積。
2. 構造方式與之前相同,只是我們試圖節省空間,先把 answer 作為方法一的 l 陣列。
3. 這種方法的唯一變化就是我們沒有構造 r 陣列。而是用乙個遍歷來跟蹤右邊元素的乘積。並更新陣列 answer[i]=answer[i]*ranswer[i]=answer[i]∗r。然後 rr 更新為 r=r*nums[i]r=r∗nums[i],其中變數 rr 表示的就是索引右側數字的乘積。
class solution
// r 為右側所有元素的乘積
// 剛開始右邊沒有元素,所以 r = 1
int r = 1;
for (int i = length - 1; i >= 0; i--)
return answer;}};
leetcode 238 除自身以外陣列的乘積
給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。示例 輸入 1,2,3,4 輸出 24,12,8,6 說明 請不要使用除法,且在 o n 時間複雜度內完成此題。高階 你可以在常數空間複雜...
leetcode238 除自身以外陣列的乘積
從左到右遍歷一趟,記錄每個位置左邊的乘積 首位為1 從右到左走一趟,將上一步的結果累乘每一位右邊的乘積 class solution object def productexceptself self,nums if not nums return output 1 len nums k 1 for...
LeetCode 238 除自身以外陣列的乘積
題目描述 給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。示例 輸入 1,2,3,4 輸出 24,12,8,6 說明 請不要使用除法,且在 o n 時間複雜度內完成此題。高階 你可以在常...